0

私の意見では有効な次のクエリがありますが、「WHERE em.p4 = ue.p3」に問題があることを示すエラーが発生し続けます- 「where句」の不明な列「ue.p3」 .

これはクエリです:

SELECT DISTINCT ue.p3
FROM 
    table1 AS ue INNER JOIN table2 AS e 
    ON ue.p3 = e.p3 
    WHERE 
        EXISTS(
            SELECT 1 FROM (
                SELECT (COUNT(*) >= 1) AS MinMutual 
                FROM table4 AS smm 
                WHERE 
                    smm.p1 IN (
                        SELECT sem.p3 FROM table3 AS sem 
                        INNER JOIN table2 AS em ON sem.p3 = em.p3 
                        WHERE em.p4 = ue.p3 AND 
                        sem.type = 'friends' AND em.p2 = 'normal' ) AND 
                    smm.p5 IN (
                        15000,15151
                    )
            ) AS Mutual WHERE 
        Mutual.MinMutual = TRUE) LIMIT 11

EXISTS 関数内にあるサブクエリを実行すると、すべて問題ありません

助けてください!

4

2 に答える 2

1

このエラーの理由は、関連付けの際にサブクエリ レイヤーを1 つ下までしか参照できないためです。エイリアスが定義されている場所をue確認し、次の参照に到達するまで FROM 句の数を数えます。

クエリを次のように書き直しました。

SELECT DISTINCT ue.p3
  FROM table1 AS ue 
  JOIN table2 AS e ON ue.p3 = e.p3 
 WHERE EXISTS(SELECT 1 AS MinMutual 
                FROM table4 AS smm 
                JOIN TABLE3 sem ON sem.p3 = smm.p1
                               AND sem.type = 'friends'
                JOIN TABLE2 em ON em.p3 = sem.p3
                              AND em.p3 = ue.p3
                              AND em.p2 = 'normal'
               WHERE smm.p5 IN (15000,15151)
            GROUP BY ? --needs a group by clause, in order to use HAVING
              HAVING COUNT(*) >= 1)  
 LIMIT 11

EXISTS は、満たされた場合に true を返します。「true」を返すサブクエリに基づいて評価されません。あなたが持っている追加のサブクエリは必要ありません(とにかく問題を引き起こしていました)。

于 2010-06-11T19:26:36.510 に答える
0

私の知る限り、この種の相関クエリは、現在のところmysqlでは実行できません。存在を使用するのではなく、派生テーブルに結合します。

于 2010-06-11T19:12:15.160 に答える