Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak uzyskać tylko pierwszy poziom węzłów potomnych głębokości?

Oto rozwiązanie:

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

Zmień p1.parent=7, a otrzymasz następujące wyjście:

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

Oto sposób, w jaki to działa:bezpośrednie dzieci są potomkami, w których istnieje ścieżka od rodzica do dziecka, ale nie ma ścieżki od rodzica przez trzeci węzeł do dziecka. Próbujemy więc połączyć się z taką ścieżką (p2->p3) i jeśli żadna nie zostanie znaleziona, to wszystkie kolumny p2 i p3 będą miały wartość 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. Nie można połączyć się z Intellij do mySql działającego w kontenerze docker - określona kombinacja użytkownika bazy danych/hasła jest odrzucana

  2. Stronniczość losowa w SQL?

  3. Tunel Node.js ssh2 utrzymuje się przy życiu i wykonuje zapytania mysql

  4. Zapytanie SQL zwracające wartości maksymalne na przestrzeni dziesięcioleci

  5. co to jest java.io.EOFException, Komunikat:Nie można odczytać odpowiedzi z serwera. Oczekiwany odczyt 4 bajtów, odczyt 0 bajtów