sql >> Databasteknik >  >> RDS >> Mysql

MySQL överordnade barn en fråga urval

Du behöver en rekursiv join som mysql inte stöder. Det enda du kan göra är att bestämma den maximala djupnivån (i ditt fall är det 1 eftersom du har p->c) och med detta kan du bestämma antalet kopplingar som behövs:

maximal nivå av djup =antal självanslutningar :

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

Till exempel om din maximala djupnivå var 3 skulle du behöva 3 självanslutningar:

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. GTFS-fråga för att lista alla avgångs- och ankomsttider mellan två hållplatsnamn

  2. Mysql:Hitta rader där tidsstämpelskillnaden är mindre än x

  3. bädda in bild i html-e-post

  4. Felsökning:MySQL/MariaDB-fel #1044 Е Åtkomst nekad för användare