【发布时间】:2013-08-31 01:42:12
【问题描述】:
以下是对我要完成的工作的简要说明;我的查询如下。
有 4 个表和 1 个视图与此特定查询相关(抱歉,名称看起来很乱,但它们遵循严格的约定,如果您看到完整列表,这将是有意义的):
Performances 可能有很多Performers,这些关联存储在PPerformer 中。 Fans 可以有收藏夹,收藏在Favorite_Performer。 _UpcomingPerformances 视图包含显示即将到来的表演的用户友好列表所需的所有信息。
我的目标是从 _UpcomingPerformances 中选择所有数据,然后添加一个额外的列,指定给定的 Performance 是否有粉丝添加为他们最喜欢的表演者。这包括选择与表演相关联的表演者列表,以及该粉丝在 Favorite_Performer 中的表演者列表,并将这两个数组相交以确定是否有任何共同点。
当我执行以下查询时,我收到错误 #1054 - Unknown column 'up.pID' in 'where clause'。我怀疑这与滥用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
【问题讨论】:
标签: mysql sql case correlated-subquery