2009-06-09 65 views
0


您能否幫我理解問題出在哪裏?其中不存在與p_Services = 200000000000115記錄
在sql中使用IN的問題

SELECT mz_t_Services.p_ID from mz_t_Services 

上面的腳本返回的記錄,其中ID爲紀錄= 200000000000115存在

SELECT mz_t_NaznExec.p_Services FROM mz_t_NaznExec 

上面的腳本返回的記錄,但此查詢不返回記錄

SELECT mz_t_Services.p_ID from mz_t_Services where mz_t_Services.p_ID not in(SELECT mz_t_NaznExec.p_Services FROM mz_t_NaznExec) 

我正在使用MSSQL
編輯:
p_ID和p_Services數據類型ara bigint

+0

「SELECT mz_t_NaznExec.p_Services FROM mz_t_NaznExec」返回什麼? – razzed 2009-06-09 04:58:59

+0

你的數據庫如何。是mz_t_NaznExec.p_爲mz_t_Services.p_ID提供外鍵嗎? – jao 2009-06-09 04:59:24

+4

...誰創造了這些表名? – 2009-06-09 05:00:48

回答

4

mz_t_NaznExec.p_Services中是否存在任何空值?如果結果集中有一個NULL,「NOT IN」將始終失敗。

1
SELECT mz_t_Services.p_ID from mz_t_Services where mz_t_Services.p_ID not in(SELECT ISNULL(mz_t_NaznExec.p_Services,0) FROM mz_t_NaznExec) 

或更好

SELECT mz_t_Services.p_ID from mz_t_Services where mz_t_Services.p_ID not in(SELECT mz_t_NaznExec.p_Services FROM mz_t_NaznExec WHERE mz_t_NaznExec.p_Services is not null) 
0

這也將工作:

SELECT p_id 
    FROM mz_t_services 
WHERE NOT EXISTS 
     (SELECT 1 
      FROM mz_t_naznexec 
      WHERE mz_t_naznexec.p_services = mz_t_services.p_id 
     ) 

我喜歡它上面的解決方案,因爲它更可靠地使用索引(在我的經驗)。無論是否存在空值,它都可以工作,所以無論您對錶格內容有何期望,您都可以隨時使用該表格,而不用擔心人們問您爲什麼要檢查列中的空值允許他們。

無論如何,你應該嘗試兩種解決方案,看看哪個更適合你。