sql >> Database >  >> RDS >> Mysql

ANSI 1992 JOIN's en COMMA's mengen in een query

Volgens deze link , moet u beide notaties niet door elkaar halen bij het opbouwen van joins. De komma die je gebruikt om lid te worden van memebers as m, telephone as t , en de daaropvolgende oproepen naar inner join , veroorzaken de onbekende kolomfout.

Om ermee om te gaan, gebruik CROSS/INNER/LEFT JOIN in plaats van komma's.

Voorheen hadden de komma-operator (,) en JOIN beide dezelfde prioriteit, dus de join-expressie t1, t2 JOIN t3 werd geïnterpreteerd als ((t1, t2) JOIN t3). JOIN heeft nu een hogere prioriteit, dus de uitdrukking wordt geïnterpreteerd als (t1, (t2 JOIN t3)). Deze wijziging is van invloed op instructies die een ON-clausule gebruiken, omdat die clausule alleen kan verwijzen naar kolommen in de operanden van de join, en de verandering in prioriteit verandert de interpretatie van wat die operanden zijn.

Voor pedagogische doeleinden voeg ik de vraag toe zoals deze, denk ik, zou moeten zijn:

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

Aangezien je niet lid wordt van t en m , het eindresultaat zal een cartesiaans product zijn; misschien wilt u dat het wordt herzien.

Ik hoop dat het heeft geholpen.



  1. Hoe selecteer je elke n-de rij van mysql

  2. mysqli_fetch_array() verwacht dat parameter 1 mysqli_result is, boolean gegeven in

  3. Hoe krijg ik datum-/tijdgegevens uit een TIMESTAMP-kolom?

  4. MySQL-dump per zoekopdracht