Mysql
 sql >> база данни >  >> RDS >> Mysql

Смесване на ANSI 1992 JOIN и COMMA в заявка

Според тази връзка , не трябва да смесвате и двете нотации, когато създавате съединения. Запетаята, която използвате, за да се присъедините към memebers as m, telephone as t и последващите извиквания към inner join , задействат неизвестната грешка в колоната.

За да се справите с него, използвайте CROSS/INNER/LEFT JOIN вместо запетаи.

Преди и операторът запетая (,) и JOIN имаха едно и също предимство, така че изразът за свързване t1, t2 JOIN t3 се интерпретираше като ((t1, t2) JOIN t3). Сега JOIN има по-висок приоритет, така че изразът се интерпретира като (t1, (t2 JOIN t3)). Тази промяна засяга изрази, които използват клауза ON, тъй като тази клауза може да се отнася само до колони в операндите на съединението, а промяната в приоритета променя интерпретацията на това какво представляват тези операнди.

За педагогически цели добавям заявката така, както мисля, че трябва да бъде:

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

Тъй като не се присъединявате към t и m , крайният резултат ще бъде декартово произведение; може да искате да бъде преработен.

Надявам се, че помогна.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. грешка по време на изпълнение:java.lang.ClassNotFoundException:com.mysql.jdbc.Driver

  2. MySQL тригер при събития за вмъкване/актуализация

  3. Генериране на диапазон от числа в MySQL

  4. MySQL Премахване на някои чужди ключове

  5. Поточно предаване на големи набори от резултати с MySQL