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

Hvordan får man kun det første niveau af dybde underordnede noder?

Her er en løsning:

select p1.* from tree_path as p1
left outer join (tree_path as p2 join tree_path as p3 on p2.children = p3.parent)
 on p2.parent = p1.parent 
 and p3.children = p1.children 
 and p2.parent <> p2.children 
 and p3.parent <> p3.children
where p1.parent = 3 and p2.parent is NULL;
+----------+--------+
| children | parent |
+----------+--------+
|        3 |      3 |
|        7 |      3 |
|        8 |      3 |
+----------+--------+
 

Skift p1.parent=7 og du får dette output:

+----------+--------+ | children | parent | +----------+--------+ | 7 | 7 | | 15 | 7 | | 16 | 7 | +----------+--------+

Sådan fungerer det:umiddelbare børn er efterkommere, hvor der er en vej fra forælder til barn, men der er ingen vej fra forælder gennem en tredje knude til barnet. Så vi forsøger at slutte os til en sådan sti (p2->p3), og hvis ingen findes, vil alle kolonner af p2 og p3 være NULL.




  1. Import af filer fra PostgreSQL til R

  2. Hvad fortæller PostgreSQL-forklaringen mig præcist?

  3. Hvordan kan man se begrænsningerne for en tabel, for eksempel hvis det er en primær nøgle eller en unik nøgle?

  4. Hvordan udfylder man automatisk et navn baseret på for- og efternavn i mysql?