sql >> Databasteknik >  >> RDS >> Mysql

Blanda ANSI 1992 JOINs och COMMAs i en fråga

Enligt denna länk , du bör inte blanda ihop båda notationerna när du bygger upp joins. Det kommatecken du använder för att ansluta memebers as m, telephone as t , och de efterföljande anropen till inner join , utlöser det okända kolumnfelet.

För att hantera det, använd CROSS/INNER/LEFT JOIN istället för kommatecken.

Tidigare hade kommaoperatorn (,) och JOIN båda samma prioritet, så sammanfogningsuttrycket t1, t2 JOIN t3 tolkades som ((t1, t2) JOIN t3). Nu har JOIN högre prioritet, så uttrycket tolkas som (t1, (t2 JOIN t3)). Den här ändringen påverkar påståenden som använder en ON-sats, eftersom den satsen endast kan hänvisa till kolumner i operanderna för join, och ändringen i prioritet ändrar tolkningen av vad dessa operander är.

I pedagogiskt syfte lägger jag till frågan som den, jag tycker, borde vara:

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

Eftersom du inte går med i t och m , det slutliga resultatet blir en kartesisk produkt; du kanske vill att den ska revideras.

Jag hoppas att det hjälpte.



  1. Disaster Recovery för Galera Cluster utplacerad till ett hybridmoln

  2. 2 sätt att ta bort dubbletter av rader i Oracle

  3. Hur man tolkar PosgreSQL txid_current() värde

  4. Lagra bild till databas blob; hämta från db till Picturebox