Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Subconsulta correlacionada do MySQL na sintaxe JOIN


A resposta para sua pergunta é não, não é possível fazer referência a nomes de correlação como você está fazendo. A tabela derivada é produzida por sua consulta interna antes que a consulta externa comece a avaliar junções. Portanto, os nomes de correlação como t , tp e u não estão disponíveis para a consulta interna.

Para resolver isso, recomendo usar o mesmo valor inteiro constante na consulta interna e, em seguida, unir a tabela derivada na consulta externa usando uma condição real em vez de 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;