2014-09-26 31 views
0

我有一種情況,我得到一個結果集並根據結果集中的值,我需要從另一個表中刪除記錄。如何在比較過程中區分NULL和NOT NULL

例子:

ResultSet rs = SELECT col FROM TableA; 

現在我不知道rs.getString(1)是否null與否。

所以如果是空我必須做的:

DELETE FROM TableB WHERE col2 IS NULL; 

如果不爲空,則:

DELETE FROM TableB WHERE col2 = rs.getString(1); 

我該怎麼辦呢?

+0

您是否正在尋找使用普通SQL或任何類型的編程語言的答案? – Desorder 2014-09-26 09:25:09

+0

我會使用存儲過程來完成工作。 此外,我有上面解釋的情況多列。 – 2014-09-26 09:43:44

回答

0

如果使用普通的比較運算符,如果其中一個操作數爲null,則它總是返回false。

所以你必須明確地檢查空值:

DELETE FROM TableB 
WHERE 
    col2 = rs.getString(1) OR -- Neither are NULL and they have the same value. 
    (col2 IS NULL AND rs.getString(1) IS NULL) -- or Both are null. 
+0

嗨,謝謝你的回覆。 – 2014-09-26 09:37:03

+0

但我有一個問題,讓我說有多個列 和相同的條件適用於所有這些。 在此先感謝。 – 2014-09-26 09:37:57

+0

感謝你的回答,我能弄明白。 – 2014-09-26 10:17:57

0

喜歡的東西:

DELETE FROM TableB 
WHERE ISNULL(col2,'VALUEISNULL') = ISNULL(rs.getString(1),'VALUEISNULL') 

「VALUEISNULL」可能是你想那會不會是該字段的有效值什麼。

0

在SQL中,null value與使用邏輯運算符(eg =, !=, <, etc)的任何其他值(包括另一個空值)a之間的比較將導致null,爲了where子句的目的而將其視爲false。推理是null表示「未知」,因此與空值比較的結果也是「未知」。所以你將不會使用my_column = null

SQL提供用於測試的特殊語法列是否爲null,經由是null和是not null,這是一個特殊的條件來測試空(或不是空)。