2009-07-03 23 views
7

これは簡単ですが、2つのテーブルを結合し、一致しない最初のテーブルのレコードのみを返すクエリをmysqlに書き込むにはどうすればいいですか? 。私はそれが何かになりたい:mysqlで不一致の結果を取得する方法

Select tid from table1 inner join table2 on table2.tid = table1.tid where table1.tid != table2.tid;

が、これは意味をたくさん作るようには見えません!

答えて

15

あなたはこれを達成するためにleft outer joinを使用することができます。これは何

select 
    t1.tid 
from 
    table1 t1 
    left outer join table2 t2 on 
     t1.tid = t2.tid 
where 
    t2.tid is null 

をあるそれは、あなたの最初のテーブル(table1)を取り、あなたの第二のテーブル(table2)とそれを結合し、そしてtable2ためnullに記入table2の行と一致しないtable1の行の列。次に一致するものが見つからない行をtable1個だけ選択してフィルタリングします。

また、あなたはまた、not existsを使用することができます。

select 
    t1.tid 
from 
    table1 t1 
where 
    not exists (select 1 from table2 t2 where t2.tid = t1.tid) 

これはleft semi joinを実行し、基本的にleft outer joinと同じことを行います。インデックスによっては、他のインデックスよりも速いかもしれませんが、どちらも実行可能なオプションです。 MySQLにはoptimizing the joinsに関する良い文書がありますので、それをチェックしてください。

+2

@ musoNic80 http://www.codinghorror.com/blog/archives/000976.htmlもチェックしてください –

関連する問題