Mysql
 sql >> Database >  >> RDS >> Mysql

Sottoquery correlata a MySQL nella sintassi JOIN

La risposta alla tua domanda è no, non è possibile fare riferimento ai nomi di correlazione come stai facendo. La tabella derivata viene prodotta dalla query interna prima che la query esterna inizi a valutare i join. Quindi i nomi di correlazione come t , tp e u non sono disponibili per la query interna.

Per risolvere questo problema, consiglierei di utilizzare lo stesso valore intero costante nella query interna, quindi unire la tabella derivata nella query esterna utilizzando una condizione reale anziché 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;