我花了一些時間,試圖爲什麼這個查詢不拉,結果我希望弄清楚:爲什麼「不存在」的SQL查詢工作,「不是」不
SELECT * FROM NGS WHERE ESPSSN NOT IN (SELECT SSN FROM CENSUS)
最後我嘗試編寫查詢另一種方式和這最終獲得了預期的效果:
SELECT * FROM NGS n WHERE NOT EXISTS (SELECT * FROM CENSUS WHERE SSN = n.ESPSSN)
第一個查詢似乎更合適,更「正確」。我一直使用「in」和「not in」來進行類似的選擇,並且從來沒有遇到過,我知道。
良好的通話!我剛查過,表中有一個空值。將查詢重寫爲SELECT * FROM NGS WHERE ESPSSN NOT IN(SELECT ISNULL(SSN,'')FROM CENSUS)給了我期望的值。我想知道我應該使用哪一個? – Josh 2010-04-02 17:47:25
@Josh:我默認爲'not exists',因爲它不會受到'null'的困擾。但是,如果您有性能問題,那麼可以考慮這兩個選項的查詢計劃 – Andomar 2010-04-02 17:52:30
@Josh,@Andomar:ISNULL將使任何可能在 – gbn 2010-04-02 18:21:23