2011-02-10 40 views
3

我是一個DB新手,並且正在爲此而掙扎。我有以下幾列現有表:SQL服務器 - 刪除多列有空值或零值的行

Showroom, Salesperson, Time1, Time2, Time3, Dte 

我想有null或在所有3分時間列零個值表中刪除所有行。我嘗試了以下方法:

DELETE FROM myTable 
WHERE EXISTS(
       SELECT * 
       FROM myTable 
       WHERE (Time1 IS NULL OR Time1 = 0) 
       AND (Time2 IS NULL OR Time2 = 0) 
       AND (Time3 IS NULL OR Time3 = 0) 
      ) 

謝天謝地,我正在研究數據庫的測試版本,因爲我擦除了所有數據。任何幫助將真正被讚賞。

+0

見任何下文正確的方法的答案。你所寫的刪除所有數據的原因是Exists在存在的語句返回任何記錄時是真的。 – 2011-02-10 21:36:12

回答

3

你想要的只是;

DELETE myTable 
WHERE 
    (Time1 IS NULL OR Time1 = 0) 
    AND (Time2 IS NULL OR Time2 = 0) 
    AND (Time3 IS NULL OR Time3 = 0) 
+0

感謝您的幫助,並儘快回覆。 – Kathy 2011-02-10 21:44:14

1

EXISTS是多餘的(因爲是FROM - 它不需要DELETE S):

DELETE myTable 
WHERE ((Time1 IS NULL OR Time1 = 0) 
    AND (Time2 IS NULL OR Time2 = 0) 
    AND (Time3 IS NULL OR Time3 = 0)) 
+0

謝謝您的及時答覆! – Kathy 2011-02-10 21:43:39

1

試試這個:

DELETE 
FROM myTable 
WHERE 
    (Time1 IS NULL OR Time1 = 0) AND 
    (Time2 IS NULL OR Time2 = 0) AND 
    (Time3 IS NULL OR Time3 = 0) 

的原因,所有的你記錄被刪除的原因是,只要存在單個記錄對於所有三列都具有NULL或0的情況,EXISTS結果就爲真。由於delete語句不識別哪些記錄刪除您的WHERE子句,它本質上是一樣的DELETE FROM myTable WHERE 1=1

14

的查詢應是這樣的:

DELETE 
FROM myTable 
WHERE (Time1 IS NULL OR Time1 = 0) 
AND (Time2 IS NULL OR Time2 = 0) 
AND (Time3 IS NULL OR Time3 = 0) 

在做DELETE報表 我想 it 總是最好先創建您的SELECT聲明,然後再更改它。

SELECT * --If this returns the correct records, simply change to DELETE 
FROM myTable 
WHERE (Time1 IS NULL OR Time1 = 0) 
AND (Time2 IS NULL OR Time2 = 0) 
AND (Time3 IS NULL OR Time3 = 0) 
+3

絕不要在沒有運行select的情況下先執行刪除操作,以查看哪些記錄將受到影響,並且在運行臨時刪除查詢時,在不運行提交的情況下將其放入事務中,直到看到有多少記錄受到影響爲止。 – HLGEM 2011-02-10 21:40:09

0
DELETE myTable WHERE 
(ISNULL(Time1,0) = 0) AND (ISNULL(Time2,0) = 0) AND (ISNULL(Time3,0) = 0)