sql >> Databasteknik >  >> RDS >> Mysql

Finns det ett "anslut med"-alternativ i MySQL?

Som sagt i kommentarerna är det inte kort väg med mysql.

MEN!

Om du har möjlighet att ändra databasstrukturen kan du använda en bättre design för att hantera trädliknande hierarkier.

Om du följer DENNA TUTORIAL från Bill Karwin (HÄR är det ursprungliga svaret som refererar till bildspelshandledningen), kan du hitta 4 metoder som används för att modellera en hierarkisk struktur:

  1. Adiacency List
  2. Sökväg
  3. Inkapslade uppsättningar
  4. Stängningstabell

Nu är den bästa möjliga modellen den 4:e (jag lämnar beskrivningar av de andra 3 modellerna till läsaren), som i princip behöver 2 tabeller:en för elementen och en för banorna. I sökvägstabellen (stängningstabellen i sig) lagrar du varje sökväg från varje nod till varje avkomling (inte bara de direkta barnen!).

Det föreslås att du också sparar sökvägslängden för varje rad, eftersom det gör det enklare att söka efter omedelbara barn i trädet.

Även om den här lösningen kräver mer utrymme, har den den bästa övergripande prestandan och den är verkligen enkel att använda:den förlitar sig inte alls på rekursiva frågor OCH den kommer att ge referensintegritet för hela datasetet!

Till exempel, för att få alla underordnade av noden #4:

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

Ett annat exempel:hämta alla förfäder till noden #11

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

måste ta bort underträdet för noden #6

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


  1. Hur man listar de föråldrade funktionerna i en SQL Server-instans med T-SQL

  2. Sidbrytning i HTML2Pdf

  3. Långsam MySQL-fråga

  4. PHP:Hämta bild från MySQL med PDO