2016-09-23 17 views
0

誤ってSQLテストの質問に遭遇した可能性があります。SQL LEFT JOIN where IN比較のwhere節

  • 私は〜100ユーザー名と言う表があります。
  • 私がやるなら、私は10人の可能なユーザ名{ANAME、BNAME、CNAME、DNAME、...}

のセットを持っている:

SELECT user.username FROM user WHERE user.username IN ('aname', 'bname', 'cname',...); 

私が選択したユーザ名のリストを取得し、テーブルで見つからないもの、つまりグランド。

私が実際に望むのは、テーブルにないもののリストです。

WHERE...IN句のリストがテーブルの場合は、私はLEFT JOINをユーザテーブルに追加し、NULLsのフィルタにします。

一時テーブルを作成せずにこれを行う方法はありますか?それをユーザーテーブルに追加する必要がありますか?私は、ユーザテーブルの左結合をWHERE...IN句にすると思いますか?

私は決してそれを見たり、見たことがありませんが、おそらくそれが存在します。

+0

YEY多分あなたは私たちが勝者を持って – Beginner

答えて

1

あなたが派生テーブルとleft joinでこれを行うことができます。

SELECT l.name 
FROM (SELECT 'aname' as name UNION ALL 
     SELECT 'bname' UNION ALL 
     SELECT 'cname' UNION ALL 
     . . . 
    ) l LEFT JOIN 
    user u 
    ON u.username = l.name 
WHERE u.username IS NULL 
+0

にする必要はありません! – eromlige

+0

"混合照合"エラーが発生しました。
比較にBINARYキャストを追加しました。 が '(ALL SELECT 'BNAME' UNION ALL SELECT 'CNAME' UNION ALL SELECT 'DNAME' 名UNIONとして 'ANAME' を選択)はL LEFTは ユーザをJOIN FROM l.name を選択U ON BINARY U .username = BINARY l.name どこにu.usernameがNULLであるか ' – eromlige