2016-09-20 31 views
0

我疊了這一點:如何使用IN根據值列表選擇具有空值的行?

我試圖做到這一點查詢:

SELECT * FROM my_table WHERE some_column IN(2, 3, 5, null) 

OR

SELECT * FROM my_table WHERE some_column IN('wert','qw3e','dfg',null) 

但不考慮NULL值,然後我tryed這一點:

SELECT * FROM my_table WHERE IF (4 is null, some_column is null, some_column IN (4)) 

此查詢適用於一個值,但正如您可以看到我n我需要考慮多個值的第一個查詢,怎麼樣?

想我需要做的是接受一個參數來查找函數:

function (param) 
SELECT * FROM my_table WHERE IF (param is null, some_column is null, some_column IN (param)) 

感謝

回答

3

你爲什麼不試試下面的方法

SELECT * FROM my_table WHERE some_column IN('wert','qw3e','dfg') OR some_column IS NULL 
+0

'SELECT * FROM MY_TABLE WHERE IF(4,3,4爲null,some_column爲null,some_column IN(4,3,4))'???????? 4,3,4是查詢的參數 –

3
SELECT * FROM my_table WHERE some_column IS NULL OR some_column IN('wert','qw3e','dfg') 
+0

'SELECT * FROM my_table WHERE IF(4,3,4爲空,some_column爲null,some_column IN(4,3,4))'??????? ? 4,3,4是查詢的參數 –

+0

您提供了兩個示例,但在這裏您有另一個示例,它非常相似,只是IN()有所不同: SELECT * FROM my_table WHERE some_column IS NULL OR some_column IN(2,3,4) –

2

兩個人有已經回答,但沒有解釋爲什麼IN(2, 3, 5, null)不返回具有N ULLs。這是因爲NULL是一個特殊的值,它不等於任何東西。 NULL = NULL本質上評估爲False。

SELECT * FROM mytable WHERE NULL=NULL; 

將返回一個空的結果,但

SELECT * FROM mytable WHERE NULL IS NULL; 

還是執意在表中返回所有行。因此,IN行數組中NULL值與行中空值的比較失敗。因此,你需要

SELECT * FROM my_table WHERE some_column 
IN('wert','qw3e','dfg') OR some_column IS NULL 
+0

我認爲(以及我是如何做出答案的)在該OR條件中的IN()之前有更好的IS NULL。 –

+0

'SELECT * FROM my_table WHERE IF(4,3,4爲空,some_column爲null,some_column IN(4,3,4))'???????? 4,3,4是查詢的參數,你不能'SELECT * FROM my_table WHERE some_column IN('wert','qw3e','dfg')OR some_column IS'wert','qw3e','dfg '' –

+0

對不起,我不明白你的評論。 – e4c5