0

特定のメールリストに登録されていないすべてのユーザーをユーザーデータベースから選択しようとしています。内部クエリは、ユーザーがリストのメンバーである場合にそのユーザーを検索し、外部クエリは、内部結果がゼロ行であるすべてのユーザーを選択します。

SELECT u.userid, u.username, u.mail, u.name, 
    u.lastname, u.starting_year, u.userid AS UIDD 
FROM userdb.users AS u 
WHERE (SELECT COUNT(*) FROM maildb.lists AS l, 
        maildb.list_subscriptions AS s, userdb.users AS u 
    WHERE u.userid = UIDD 
    AND l.listid = '$LIST_ID_TO_LOOKUP' 
    AND s.userid = u.userid 
    AND s.listid = l.listid) = 0 
ORDER BY u.starting_year DESC, u.lastname, u.name;

これは、新しいサーバーに移動してMySQLを含む多くのコンポーネントを更新するまでは問題なく機能しました。

このクエリを実行するとエラーが発生します。

#1054-'where句'の不明な列'UIDD'

これは、現在は非難されている古い構文の問題でしょうか?現在、MySQL5.5.24を実行しています。

4

2 に答える 2

1

このようなもの、SELECT .. WHERE userid NOT IN(サブクエリ)

SELECT 
 u.userid, 
 u.username, 
 u.mail, 
 u.name, 
 u.lastname,
 u.starting_year, 
 u.userid AS UIDD 
FROM 
 userdb.users AS u 
WHERE 
 u.userid NOT IN (
    SELECT 
      u.userid 
    FROM 
      maildb.lists AS l, 
      maildb.list_subscriptions AS s, 
      userdb.users AS u 
    WHERE 
      u.userid = u.userid 
      AND l.listid = '$LIST_ID_TO_LOOKUP' 
      AND s.userid = u.userid 
      AND s.listid = l.listid
    ) 
ORDER BY 
 u.starting_year DESC, u.lastname, u.name;
于 2012-10-23T20:20:34.750 に答える
0

それをしてはいけない。

何ができるかというと、サブクエリを書き直して列とグループを選択し、u.useridこのサブ選択に参加することです。sub_select.userid = u.userid

于 2012-10-23T20:00:17.070 に答える