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

Czy w MySQL istnieje alternatywa „connect by”?

Jak wspomniano w komentarzach, z mysql nie ma krótkiej drogi.

ALE!

Jeśli masz możliwość zmiany struktury bazy danych, możesz wdrożyć lepszy projekt, aby obsługiwać hierarchie przypominające drzewa.

Jeśli śledzisz TEN SAMOUCZEK od Billa Karwina (TUTAJ jest oryginalną odpowiedzią, która odwołuje się do tego samouczka pokazu slajdów), można znaleźć 4 metody używane do modelowania struktury hierarchicznej:

  1. Lista adiacencji
  2. Wyliczanie ścieżek
  3. Zestawy zagnieżdżone
  4. Zamykanie tabeli

Teraz najlepszym możliwym modelem jest czwarty (opisy pozostałych 3 modeli zostawiam czytelnikowi), który w zasadzie potrzebuje 2 tabel:jednej dla elementów i jednej dla ścieżek. W tabeli ścieżek (sama tabela zamykania) będziesz przechowywać każdą ścieżkę od każdego węzła do każdego potomka (nie tylko bezpośrednie dzieci!).

Sugeruje się zapisanie również długości ścieżki dla każdego wiersza, ponieważ ułatwia to zapytanie o najbliższe dzieci w drzewie.

Nawet jeśli to rozwiązanie wymaga więcej miejsca, ma najlepszą ogólną wydajność i jest naprawdę łatwe w użyciu:w ogóle nie opiera się na zapytaniach rekurencyjnych ORAZ zapewni integralność referencyjną dla całego zestawu danych!

Na przykład, aby uzyskać każde dziecko węzła #4:

select a.*
from nodes a
join paths b
on a.node_id = b.descendant
where b.ancestor = 4

Inny przykład:pobierz wszystkich przodków węzła #11

select a.*
from nodes a
join paths b
on a.node_id = b.ancestor
where b.descendant = 11

trzeba usunąć poddrzewo węzła #6

delete from paths where descendant in
(select descendant from paths where ancestor = 6)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sposób na odczyt danych tabeli z Mysql do Pig

  2. Połącz się z MySQL na AWS z komputera lokalnego

  3. Jak uruchomić plik *.sql mysql w mojej aplikacji c#?

  4. Zmiana formatu daty w zapytaniu

  5. Aktualizacja sekwencyjna z asocjacją