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

Blanding af ANSI 1992 JOINs og COMMAs i en forespørgsel

Ifølge dette link , bør du ikke blande begge notationer, når du bygger joins. Det komma, du bruger til at tilslutte memebers as m, telephone as t , og de efterfølgende opkald til inner join , udløser den ukendte kolonnefejl.

For at håndtere det, brug CROSS/INNER/LEFT JOIN i stedet for kommaer.

Tidligere havde kommaoperatoren (,) og JOIN begge samme forrang, så join-udtrykket t1, t2 JOIN t3 blev fortolket som ((t1, t2) JOIN t3). JOIN har nu højere forrang, så udtrykket fortolkes som (t1, (t2 JOIN t3)). Denne ændring påvirker sætninger, der bruger en ON-sætning, fordi den sætning kun kan henvise til kolonner i operanderne af joinforbindelsen, og ændringen i forrang ændrer fortolkningen af, hvad disse operander er.

Af pædagogiske formål tilføjer jeg forespørgslen, som den, jeg synes, burde være:

SELECT m.*, t.*
FROM memebers as m 
    JOIN telephone as t
    JOIN memeberFunctions as mf ON m.id = mf.memeber AND mf.function = 32
    JOIN mitgliedTelephone as mt ON m.id = mt.memeber

Da du ikke tilmelder dig t og m , det endelige resultat vil være et kartesisk produkt; du vil måske have den revideret.

Jeg håber, det hjalp.



  1. Brug MySQL rumlige udvidelser til at vælge punkter inde i cirklen

  2. Bekræft databaseforbindelsen med pg-promise, når du starter en app

  3. Hvordan forbinder man to tabeller på et fremmednøglefelt ved hjælp af django ORM?

  4. Hvordan sammenligner jeg 2 rækker fra den samme tabel (SQL-server)?