【轉載】
先說基本情況:
資料庫:DB2 8.2,SQL Server 2005 Express
表a 有字段:aaa,bbb,還可能有其他字段。記錄條數:3764
表b 有字段:aaa,bbb,還可能有其他字段。記錄條數:4127
就是表a的字段aaa跟表b的字段aaa有對應關系,表a字段的bbb跟表b的字段bbb有對應關系。
要求隻有aaa,bbb兩個字段都同時對應上了才算是真的對應上了。(也不知道我說的清不清楚,了解萬歲啊)
好了,開始正文:
如下語句就是我們想要的結果:
select * from b where (aaa,bbb) in ( select aaa,bbb from a );
不過很可惜,上面的語句在某些資料庫中不支援
還好可以用下面的語句來代替
select * from b where exists ( select * from a where a.aaa=b.aaa and a.bbb=b.bbb);
下面就幾個方面比較一下吧(雖然意義不是很大,呵呵)
寫法上:
當然是in、not in最直覺了(地球人都知道)。
再說效率問題(DB2下測試):
in效率比exists高
not exists效率比not in高
具體執行時間如下:
in 0.01 secs
exists 0.03 secs
not in 8.62 secs
not exists 0.03 secs
總結:
多字段in、not in在db2資料中可以執行,SQL Server不行。(其他資料庫沒有試過,不知道!)
exists、not exists在db2,SQL Server均可執行。(其他資料庫沒有試過,不知道!)
而且總體上用exists,not exists 效率都很高,建議大家還是用好exists,not exists吧!