innertable.id = outertable.id を指定して、内部クエリに WHERE 条件を提供したいと考えています。ただし、MySQL (5.0.45) は「'where 句' の不明な列 'outertable.id'」を報告します。このタイプのクエリは可能ですか?
内部クエリは、GROUP BY を使用して行を列にピボットしています。これは完全に外側のクエリで実行できますが、追加の結合により追加のオーバーヘッドが発生する可能性があります。
別の方法として、内側のクエリで WHERE 条件を省略し、代わりに ON outertable.id = innerquery.id を指定することもできますが、内側のクエリの行セット全体をフェッチして、外側のクエリを再度結合することになり、非効率的です。
実際の SQL は次のようになります。
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 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 = t.ticketid
group by cfv.typeid
) as a on 1 = 1
where t.ticketid = 2458;