Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL genitore figli una selezione di query

Hai bisogno di un join ricorsivo che mysql non supporta. L'unica cosa che puoi fare è determinare il livello massimo di profondità (nel tuo caso è 1 dato che hai p->c) e con questo puoi determinare il numero di join necessari:

livello massimo di profondità =numero di auto join :

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

Ad esempio, se il tuo livello massimo di profondità fosse 3, avresti bisogno di 3 auto join:

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