Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Elternkinder eine Abfrageauswahl

Sie benötigen einen rekursiven Join, den MySQL nicht unterstützt. Das einzige, was Sie tun können, ist die maximale Tiefe zu bestimmen (in Ihrem Fall ist es 1, da Sie p->c haben) und damit können Sie die Anzahl der benötigten Joins bestimmen:

maximale Tiefe =Anzahl der 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

Wenn Ihre maximale Tiefe beispielsweise 3 wäre, würden Sie 3 Self-Joins benötigen:

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