sql >> Database teknologi >  >> RDS >> Mysql

komplekse sql trærækker

Der er flere alternativer til at gøre hierarkisk information lettere at arbejde med i SQL:

  • Almindelige tabeludtryk (ifølge SQL-2003-standarden) understøtter rekursive SQL-forespørgsler mod den overordnede-id-type af data, du bruger. Indtil videre understøtter MySQL ikke denne funktion. PostgreSQL 8.4, Microsoft SQL Server og IBM DB2 er eksempler på RDBMS-mærker, der understøtter CTE-syntaks. Oracle har også en proprietær udvidelse til SQL-syntaks, der understøtter rekursive forespørgsler.

  • Indlejrede sæt (venstre/højre-løsningen, som @phantombrain nævner) er en løsning beskrevet i Joe Celkos bog "Trees and Hierarchies in SQL for Smarties" og også i adskillige artikler og blogindlæg på internettet.

  • Stioptælling (aka Materialized Path) gemmer en streng i hver række i hierarkiet for at notere stien til forfædre til den række. Kombiner dette med LIKE forespørgsler for at sammenligne stistrengen med dens forfædres stier og efterkommeres stier.

  • Lukningstabel (aka Transitive Closure Relation) bruger en anden tabel til at gemme alle forfader-efterkommer-relationer, ikke kun den umiddelbare forælder som i det design, du bruger. Mange typer forespørgsler bliver nemmere, når du har gemt alle stierne.

  • Hybridløsninger findes også. Gem f.eks. det umiddelbare forældre-id, som du gør, men også roden af ​​træet. Nu kan du få alle andre rækker i det samme hierarki, hente dem ind i applikationskoden og sortere træet fra med konventionelle datastrukturer.



  1. Den nemme måde at implementere en MySQL Galera Cluster på AWS

  2. Er der en måde at pivotere rækker til kolonner i MySQL uden at bruge CASE?

  3. SQL VÆLG MAKS

  4. MYSQL-opdatering fra samme tabel