我想通過指定innertable.id = outertable.id來爲內部查詢提供WHERE條件。但是,MySQL(5.0.45)在'where子句'「中報告」未知列'outertable.id'「。這種類型的查詢可能嗎?JOIN語法中的MySQL相關子查詢
內部查詢使用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;
我原來的問題是,「這種類型的查詢可能嗎?」 (相對於MySQL 5.0)。 更改模式或在應用程序代碼上進行分析不屬於問題主題。 – 2009-02-10 15:31:48