【问题标题】:Correlated Subquery in a MySQL CASE StatementMySQL CASE 语句中的相关子查询
【发布时间】: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


    【解决方案1】:

    问题与范围有关。嵌套选择使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
    

    【讨论】:

    • 像魅力一样工作。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2019-09-15
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    相关资源
    最近更新 更多