Het antwoord op uw vraag is nee, het is niet mogelijk om naar correlatienamen te verwijzen zoals u doet. De afgeleide tabel wordt geproduceerd door uw inner query voordat de outer query begint met het evalueren van joins. Dus de correlatienamen zoals t
, tp
, en u
zijn niet beschikbaar voor de innerlijke zoekopdracht.
Om dit op te lossen, raad ik aan om dezelfde constante integerwaarde in de inner query te gebruiken en vervolgens de afgeleide tabel in de outer query samen te voegen met een echte voorwaarde in plaats van 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;