MySQL CASE语句中的相关子查询
作者:互联网
这是对我要完成的事情的简要说明;我的查询如下.
有4个表和1个视图与这个特定查询相关(遗憾的是,这些名称看起来很混乱,但它们遵循严格的约定,如果您看到完整列表,这将是有意义的):
演出可能有许多演员,这些关联存储在PPerformer中.粉丝可以拥有收藏夹,这些收藏夹存储在Favorite_Performer中. _UpcomingPerformances视图包含显示即将进行的演出的用户友好列表所需的所有信息.
我的目标是从_UpcomingPerformances中选择所有数据,然后包含一个额外的列,指定给定的Performance是否具有Fan添加为其最喜欢的Performer.这包括选择与Performance相关联的Performers列表,以及在Fan的Favorite_Performer中的Performers列表,并与两个数组相交以确定是否有任何共同点.
当我执行以下查询时,我在’where子句’中收到错误#1054 – 未知列’up.pID’.我怀疑这与滥用Correlated Subqueries有关,但据我所知,我在做什么应该工作.当我用硬编码的数字替换up.pID(在t2的WHERE子句中)时,它可以工作,是的,pID是_UpcomingPerformances的现有列.
感谢您的任何帮助,您可以提供.
SELECT
up.*,
CASE
WHEN EXISTS (
SELECT * FROM (
SELECT RID FROM Favorite_Performer
WHERE FanID = 107
) t1
INNER JOIN
(
SELECT r.ID as RID
FROM PPerformer pr
JOIN Performer r ON r.ID = pr.Performer_ID
WHERE pr.Performance_ID = up.pID
) t2
ON t1.RID = t2.RID
)
THEN "yes"
ELSE "no"
END as pText
FROM
_UpcomingPerformances up
解决方法:
问题与范围有关.嵌套的Selects使得up表在内部select中不可见.试试这个:
SELECT
up.*,
CASE
WHEN EXISTS (
SELECT *
FROM Favorite_Performer fp
JOIN Performer r ON fp.RID = r.ID
JOIN PPerformer pr ON r.ID = pr.Performer_ID
WHERE fp.FanID = 107
AND pr.Performance_ID = up.pID
)
THEN 'yes'
ELSE 'no'
END as pText
FROM
_UpcomingPerformances up
标签:mysql,sql,case,correlated-subquery 来源: https://codeday.me/bug/20190624/1282580.html