我想通过指定innertable.id = outertable.id在内部查询中提供一个WHERE条件。然而,MySQL(5.0.45)报告“where clause”中未知的列“outertable.id”。这种类型的查询是否可行?
内部查询使用GROUP BY将行旋转为列。虽然外部查询完全可以执行此操作,但由于额外的连接可能会产生额外的开销。
或者,我可以在内部查询中省略WHERE条件,而是指定ON outertable.id = innerquery.id,但它将获取整个内部查询行集以再次加入外部查询,这是低效的。
下面是实际的SQL:
内部查询使用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;