これは簡単ですが、2つのテーブルを結合し、一致しない最初のテーブルのレコードのみを返すクエリをmysqlに書き込むにはどうすればいいですか? 。私はそれが何かになりたい:mysqlで不一致の結果を取得する方法
Select tid from table1 inner join table2 on table2.tid = table1.tid where table1.tid != table2.tid;
が、これは意味をたくさん作るようには見えません!
これは簡単ですが、2つのテーブルを結合し、一致しない最初のテーブルのレコードのみを返すクエリをmysqlに書き込むにはどうすればいいですか? 。私はそれが何かになりたい:mysqlで不一致の結果を取得する方法
Select tid from table1 inner join table2 on table2.tid = table1.tid where table1.tid != table2.tid;
が、これは意味をたくさん作るようには見えません!
あなたはこれを達成するために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に関する良い文書がありますので、それをチェックしてください。
@ musoNic80 http://www.codinghorror.com/blog/archives/000976.htmlもチェックしてください –