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

Skorelowane podzapytanie MySQL w składni JOIN

Odpowiedź na twoje pytanie brzmi:nie, nie można odwoływać się do nazw korelacji tak, jak to robisz. Tabela pochodna jest tworzona przez zapytanie wewnętrzne, zanim zapytanie zewnętrzne zacznie oceniać sprzężenia. Więc nazwy korelacji, takie jak t , tp i u nie są dostępne dla wewnętrznego zapytania.

Aby rozwiązać ten problem, zalecam użycie tej samej stałej wartości całkowitej w zapytaniu wewnętrznym, a następnie dołączenie tabeli pochodnej w zapytaniu zewnętrznym przy użyciu rzeczywistego warunku zamiast 1=1 .

SELECT t.ticketid, u.userid, t.fullname, u.loginapi_userid, t.email,
  tp.subject, tp.contents, a.PhoneNumber, a.Location, a.Extension,
  a.BusinessUnit, a.Department
FROM swtickets t
 INNER JOIN swticketposts tp ON (t.ticketid = tp.ticketid)
 INNER JOIN swusers u ON (t.userid = u.userid)
 LEFT OUTER JOIN (
  SELECT cfv.typeid,
    MIN(CASE cfv.customfieldid WHEN 1 THEN cfv.fieldvalue END) AS 'PhoneNumber',
    MIN(CASE cfv.customfieldid WHEN 3 THEN cfv.fieldvalue END) AS 'Location',
    MIN(CASE cfv.customfieldid WHEN 5 THEN cfv.fieldvalue END) AS 'Extension',
    MIN(CASE cfv.customfieldid WHEN 8 THEN cfv.fieldvalue END) AS 'BusinessUnit',
    MIN(CASE cfv.customfieldid WHEN 9 THEN cfv.fieldvalue END) AS 'Department'
  FROM swcustomfieldvalues cfv
  WHERE cfv.typeid = 2458
  GROUP BY cfv.typeid
  ) AS a ON (a.typeid = t.ticketid)
WHERE t.ticketid = 2458;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstaw dużą ilość zmiennych do tabeli za pomocą PDO

  2. Przygotowana instrukcja, zapytanie `WHERE .. IN(..)` i sortowanie — z MySQL

  3. hierarchia mysql samodołączanie, pobieranie wszystkich podkategorii

  4. Zarządzanie kontami użytkowników, role, uprawnienia, uwierzytelnianie PHP i MySQL -- Część 5

  5. Użyj MySQL, aby określić, czy dzisiaj są urodziny użytkownika