4

这是对我要完成的工作的简要说明;我的查询如下。

有 4 个表和 1 个视图与此特定查询相关(抱歉,名称看起来很乱,但它们遵循严格的约定,如果您看到完整列表,这将是有意义的):

Performances 可能有很多Performer个 s,这些关联存储在PPerformer. Fans 可以有收藏夹,这些收藏夹存储在Favorite_Performer. 该_UpcomingPerformances视图包含显示即将进行的表演的用户友好列表所需的所有信息。

我的目标是从 _UpcomingPerformances 中选择所有数据,然后包含一个额外的列,指定给定的 Performance 是否有粉丝添加为他们最喜欢的 Performer。这包括选择与表演相关联的表演者列表,以及该粉丝在 Favorite_Performer 中的表演者列表,并将这两个数组相交以确定是否有任何共同点。

当我执行下面的查询时,我得到了错误#1054 - Unknown column 'up.pID' in 'where clause'。我怀疑这与滥用相关子查询有关,但据我所知,我正在做的事情应该有效。当我用硬编码的数字替换up.pID(在 WHERE 子句中t2)时,它可以工作,是的,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
4

1 回答 1

4

问题与范围有关。嵌套的选择使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
于 2013-08-31T01:57:07.293 回答