Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Mieszanie sprzężeń ANSI 1992 i przecinków w zapytaniu

Według ten link , nie należy mieszać obu notacji podczas tworzenia złączeń. Przecinek, którego używasz, aby dołączyć do memebers as m, telephone as t i kolejne wywołania inner join , wywołują błąd nieznanej kolumny.

Aby sobie z tym poradzić, użyj CROSS/INNER/LEFT JOIN zamiast przecinków.

Wcześniej operator przecinka (,) i JOIN miały ten sam priorytet, więc wyrażenie sprzężenia t1, t2 JOIN t3 było interpretowane jako ((t1, t2) JOIN t3). Teraz JOIN ma wyższy priorytet, więc wyrażenie jest interpretowane jako (t1, (t2 JOIN t3)). Ta zmiana dotyczy instrukcji, które używają klauzuli ON, ponieważ klauzula ta może odnosić się tylko do kolumn w operandach złączenia, a zmiana pierwszeństwa zmienia interpretację tego, czym te operandy są.

Ze względów pedagogicznych dodaję zapytanie, które moim zdaniem powinno wyglądać:

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

Ponieważ nie dołączasz do t i m , wynik końcowy będzie produktem kartezjańskim; możesz chcieć, aby został poprawiony.

Mam nadzieję, że to pomogło.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Indeksy MySQL - jakie są najlepsze praktyki?

  2. Ostrzeżenie:mysql_result() oczekuje, że parametr 1 będzie zasobem, podana wartość logiczna

  3. Automatyzacja wdrażania bazy danych MySQL

  4. Jak działa operator LIKE w MySQL

  5. Jak używać MySQLdb z Pythonem i Django w OSX 10.6?