2015-06-11 41 views
1

我試圖刪除數據庫的行沒有電話,chellphone和電子郵件(所有3個一起)如果有兩個及

DELETE * 
FROM TEST 
WHERE (((TEST.EMAIL1) IS Null) 
AND ((TEST.PHONE3) IS Null) 
AND ((TEST.PHONE1) IS Null)); 

出於某種原因,如果我做的只是任意兩個(電子郵件1,電話1或電話3)它的工作原理,但是當我添加第二個'AND'時,它停止工作。任何建議請。

+2

如果你的意思是沒有行被「停止工作」刪除 - 也許沒有數據,其中所有3都是NULL。嘗試使用相同的條件觸發選擇。 – 6ton

+0

抱歉停止工作我的意思是什麼都沒有刪除 – Amiaki

+1

6ton意思是:也許你的第三個字段不爲空。 –

回答

0

您可能沒有所有三個都爲空的行。檢查你的數據。

+0

我有2行,其中所有3個都是空的 – Amiaki

+0

@Amiaki注意,empty與'null'不是同一個東西 – Kritner

1

與所有AND S中的括號是不是真的有必要

DELETE 
FROM TEST 
WHERE TEST.EMAIL1 IS Null 
AND TEST.PHONE3 IS Null 
AND TEST.PHONE1 IS Null; 

但是,需要確保你希望得到實際刪除值中包含NULL,而不是像空字符串或空的文本值。

您可以查看哪些信息會通過改變你的語句select語句,而不是被刪除:根據您自己的答案,你遇到了空字符串,而不是空你的問題

SELECT * 
FROM TEST 
WHERE TEST.EMAIL1 IS Null 
AND TEST.PHONE3 IS Null 
AND TEST.PHONE1 IS Null; 

。寫你寫什麼,以避免另一種方式OR值是:

SELECT * 
FROM TEST 
WHERE isnull(TEST.EMAIL1, '') <> '' 
AND isnull(TEST.PHONE3, '') <> '' 
AND isnull(TEST.PHONE1, '') <> ''; 

在我們指出,我們遇到的任何空test.email1s,當作一個空字符串,然後檢查該值以上不是空字符串。

所以基本上 - 如果這三個字段中的任何一個爲空或空字符串。和你的答案一樣,只是寫它的另一種方式。

1

老實說WHERE子句看起來在這個例子中還行,但「*」應該被排除在外:

DELETE FROM TEST 
    WHERE (((TEST.EMAIL1) IS Null) 
     AND ((TEST.PHONE3) IS Null) 
     AND ((TEST.PHONE1) IS Null)); 

如果您有刪除星號後的麻煩,它在重新複製粘貼回去,並且我們可以看到括號或其他內容是否存在問題。但是上面的包圍看起來不錯(即使不是必要的)。

1

我不知道是怎麼回事你的情況,但我已經清理你的發言有點,因爲你不應該需要所有這些(),據我所知,並刪除不需要*爲它應該刪除任何符合你的標準的東西。試試看,讓我知道!

DELETE 
FROM TEST 
WHERE EMAIL1 IS Null 
AND PHONE3 IS Null 
AND PHONE1 IS Null 
1
DELETE * 
FROM test 
WHERE (((test.EMAIL1) ="") OR ((test.EMAIL1) IS NULL)) 
AND (((test.PHONE1) = "") OR ((test.phone1) IS NULL)) 
AND (((test.PHONE3) ="") OR ((test.phone3) IS NULL)); 

爲我工作。謝謝大家..

+0

請參閱我更新的答案,以另一種方式寫這個,再次不必處理所有'()'和「或」 – Kritner