Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да получите само първото ниво на дъщерни възли на дълбочина?

Ето едно решение:

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

Променете p1.parent=7 и ще получите този резултат:

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

Ето как работи:непосредствените деца са потомци, където има път от родител към дете, но няма път от родител през трети възел до детето. Така че ние се опитваме да се присъединим към такъв път (p2->p3) и ако не бъде намерен нито един, тогава всички колони на p2 и p3 ще бъдат NULL.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. LAST_INSERT_ID() винаги връща 0 (RMySQL) - отделен проблем с връзката

  2. Деактивирайте Root Login в phpMyAdmin

  3. MySQL добавя полета към Enum

  4. Подготовка на MySQL INSERT/UPDATE оператор със стойности по подразбиране

  5. АКО НЕ СЪЩЕСТВУВА в тригера