sql >> Databáze >  >> RDS >> Mysql

Míchání ANSI 1992 JOINs a COMMAs v dotazu

Podle tohoto odkazu , neměli byste při vytváření spojení zaměňovat oba zápisy. Čárka, kterou používáte ke spojení memebers as m, telephone as t a následná volání inner join , spouštějí chybu neznámého sloupce.

Chcete-li to vyřešit, použijte CROSS/INNER/LEFT JOIN místo čárek.

Dříve měly operátory čárky (,) a JOIN stejnou prioritu, takže spojovací výraz t1, t2 JOIN t3 byl interpretován jako ((t1, t2) JOIN t3). Nyní má JOIN vyšší prioritu, takže výraz je interpretován jako (t1, (t2 JOIN t3)). Tato změna ovlivní příkazy, které používají klauzuli ON, protože tato klauzule může odkazovat pouze na sloupce v operandech spojení a změna priority mění interpretaci toho, co tyto operandy jsou.

Pro pedagogické účely přidávám dotaz, jak si myslím, že by měl být:

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

Protože se nepřipojujete k t a m , konečným výsledkem bude kartézský součin; možná budete chtít, aby byl revidován.

Doufám, že to pomohlo.



  1. Jak funguje funkce LOWER() v MySQL

  2. Jak funguje TIMEDIFF() v MariaDB

  3. Zápis do databáze MySQL s pandami pomocí SQLAlchemy, to_sql

  4. SQL Server Vložit, pokud neexistuje