4

これが私が達成しようとしていることの簡単な説明です。私のクエリは以下のとおりです。

この特定のクエリに関連する 4 つのテーブルと 1 つのビューがあります (名前が乱雑に見えて申し訳ありませんが、完全なリストを見れば意味のある厳密な規則に従っています)。

Performanceには多数Performerの が含まれる場合があり、それらの関連付けは に格納されPPerformerます。Fanは、 に保存されているお気に入りを持つことができますFavorite_Performer_UpcomingPerformancesビューには、今後の公演のユーザー フレンドリーなリストを表示するために必要なすべての情報が含まれています。

私の目標は、_UpcomingPerformances からすべてのデータを選択し、特定のパフォーマンスにファンがお気に入りとして追加したパフォーマーがあるかどうかを指定する列を 1 つ追加することです。これには、パフォーマンスに関連付けられたパフォーマーのリストと、そのファンの Favorite_Performer にあるパフォーマーのリストを選択し、2 つの配列を交差させて共通点があるかどうかを判断することが含まれます。

以下のクエリを実行すると、エラーが発生します#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 に答える