sql >> Database >  >> RDS >> Mysql

MySQL bovenliggende kinderen één zoekopdracht selectie

Je hebt een recursieve join nodig die mysql niet ondersteunt. Het enige dat u kunt doen, is het maximale niveau van diepte bepalen (in uw geval 1 omdat u p->c hebt) en hiermee kunt u het aantal benodigde verbindingen bepalen:

maximaal niveau van diepte =aantal self-joins :

SELECT
    p.id as parent_id,
    p.name as parent_id,
    c1.id as child_id,
    c1.name as child_name
FROM 
    my_table p
LEFT JOIN my_table c1
    ON c1.parent = p.id
WHERE
    p.parent=0

Als je maximale diepte bijvoorbeeld 3 was, heb je 3 self-joins nodig:

SELECT
    p.id as parent_id,
    p.name as parent_id,
    c1.id as child_id_1,
    c1.name as child_name_1,
    c2.id as child_id_2,
    c2.name as child_name_2,
    c3.id as child_id_3,
    c3.name as child_name_3
FROM 
    my_table p
LEFT JOIN my_table c1
    ON c1.parent = p.id
LEFT JOIN my_table c2
    ON c2.parent = c1.id
LEFT JOIN my_table c3
    ON c3.parent = c2.id
WHERE
    p.parent=0


  1. Een inleiding tot SQL-indexen

  2. De beste manier om werkuren op te slaan en efficiënt op te vragen

  3. MySQL naar SQL Server migratie

  4. Voer regex (vervangen) uit in een SQL-query