2015-01-02 130 views
1

我有一個簡單的刪除查詢我有兩個表Table 1和TableDELETE語句的查詢使用NOT IN子句不工作

查詢是

DELETE FROM table1 
WHERE end_time NOT IN (SELECT end_time 
         FROM table2 
         WHERE comp_name = 'component') 
     AND id = 'id' 

查詢不刪除我失去了什麼紀錄在這裏我試圖改變第一個條件,但是它沒有檢查條件而刪除2

這裏有什麼替代方法?

我想知道這裏的實際問題是什麼,查詢運行沒有錯誤,但它是不正確的。

+4

嘗試運行每個條件的選擇查詢,看是否得到任何結果 – roeygol

+0

存在SELECT查詢沒有結果當我用這兩個條件但每個條件共同作用的結果 – user3786134

+2

嘗試'存在'而不是'在'。當In中有空值時'In'可以表現'奇怪'。 – Hatsjoem

回答

3

可能是alias應該解決您的問題,因爲這兩個表具有相同的列名稱end_timeOuter query列可以在subquery內部引用,這可能是問題所在。

DELETE FROM table1 
WHERE end_time NOT IN (SELECT b.end_time 
         FROM table2 B 
         WHERE b.comp_name = 'component') 
     AND id = 'id' 

更新:試試這個刪除,因爲你可能在你的子查詢null值,其中NOT IN將失敗。檢查這個帖子link

DELETE a 
FROM table1 a 
WHERE NOT EXISTS (SELECT 1 
        FROM table2 B 
        WHERE b.comp_name = 'component' 
          AND a.end_time = b.end_time) 
     AND id = 'id'