sql >> Databáze >  >> RDS >> Mysql

Jak získat pouze první úroveň podřízených uzlů hloubky?

Zde je řešení:

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 |
+----------+--------+

Změňte p1.parent=7 a získáte tento výstup:

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

Funguje to takto:bezprostřední děti jsou potomci, kde existuje cesta od rodiče k dítěti, ale neexistuje žádná cesta od rodiče přes třetí uzel k dítěti. Pokusíme se tedy připojit k takové cestě (p2->p3) a pokud se žádná nenajde, pak všechny sloupce p2 a p3 budou NULL.




  1. Jak najít opakovaná slova buňky v SQL

  2. Nepodceňuji MySQL?

  3. Použití Magento API v/s plain MySQL

  4. Haversine výpočet vzdálenosti mezi dvěma body v Laravel