2011-12-13 27 views
0

別のテーブルにまだ存在しないアイテムのリストを表示しようとしています。例えば:MySQL用にNOT EXISTSを正しく使用するにはどうすればよいですか?

usertable: 

uid 
name 
email 

othertable: 
uid 

私はすでに、他のテーブルに存在し、ユーザーをフィルタしようとしているので、私はUSERTABLEを表示する場合、それだけでothertableではないユーザーが表示されます。

+0

[MySQLの "NOT IN"クエリの可能な複製](http://stackoverflow.com/questions/1519272/mysql-not-in-query) – CanSpice

+1

これはhttp://stackoverflow.com/の正確な複製です質問/ 915643/select-where-not-exists –

答えて

3

mysqlに存在しないことは、あなたがしたいことから完全に別のものです。 更新:これは正しくありません!(指摘ありがとう)

私はユーザーテーブルにあるがothertableにないすべてのレコードを選択したいと思っています。

SELECT * FROM usertable WHERE uid NOT in (SELECT uid FROM othertable) 

UPDATEあなたは、IDだけでなく、行のすべてのフィールドを確認したい場合は、次のようなものを使用することができます。これは、JOINをLEFTと単純になり

SELECT * FROM usertable 
WHERE field1, field2, fieldN NOT IN 
(SELECT field1, field2, fieldN FROM othertable) 
+0

これは正しいです!ありがとう! 2番目の選択にWHERE句を追加することもできますか? – diesel

+1

「存在しない」は、このケースに対して完全に有効なアプローチです。 –

+0

@diesel確かに、2番目のクエリは、 '... IN ...'フィルタに使用される一連の結果を返す通常のクエリです – redShadow

2

を:あなたが持っているしたい場合は

SELECT u.* 
FROM usertable u 
LEFT JOIN othertable o USING (uid) 
WHERE o.uid IS NULL 

NOT EXISTS

SELECT * 
FROM usertable u 
WHERE NOT EXISTS (
    SELECT * 
    FROM othertable o 
    WHERE o.uid = u.uid 
    ) 
関連する問題