MySQL CASE语句中的相关子查询

4
这里是我想要实现的简要说明; 下面是我的查询。
有4个表和1个视图与此特定查询相关(抱歉,名称看起来很乱,但如果您看到完整列表,它们遵循一个严格的约定,就会有意义): Performance 可能有多个 Performer,这些关联存储在 PPerformer 中。 Fan 可以有收藏夹,这些收藏存储在 Favorite_Performer 中。 _UpcomingPerformances 视图包含显示用户友好的即将上演的表演所需的所有信息。
我的目标是从 _UpcomingPerformances 中选择所有数据,然后包括一个额外的列,指定给定的 Performance 是否有 Performer 被 Fan 添加为其收藏。这涉及选择与 Performance 相关联的 Performers 列表,以及在 Favorite_Performer 中的 Performers 列表,然后交集两个数组以确定是否有任何共同之处。
当我执行以下查询时,我收到错误信息#1054 - Unknown column 'up.pID' in 'where clause'。我怀疑这可能与对关联子查询的误用有关,但据我所知,我正在做的应该是可以工作的。当我用一个硬编码的数字替换t2中WHERE子句中的up.pID时,它可以工作,而且,是的,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
1个回答

4
问题与作用域有关。嵌套的Select语句会导致内部选择中的up表格不可见。请尝试以下方法:
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接