2013-11-26 92 views
1

我想使用IN子句進行搜索,因爲它看起來比負載爲ANDOR s的子元素更清潔。我將使用複合鍵進行此搜索。因此,例如我有一個表table1有兩列:col1 int(12) NOT NULLcol2 varchar(15) NULL。我用下面的查詢拉出來的數據:具有NULL值的複合IN子句

SELECT `col1`, `col2` 
FROM `table1` 
WHERE (`col1`, `col2`) IN ((1, "ROW1"), (2, "ROW2"), ...) 

由於col2可能包含NULL值我可能有一個情況下,我需要做的:

SELECT `col1`, `col2` 
FROM `table1` 
WHERE (`col1`, `col2`) IN ((1, "ROW1"), (2, NULL), ...) 

此查詢不會引發任何錯誤,但它不會提取(2, NULL)的數據。有沒有辦法讓IN子句接受這種類型的語法,還是隻是將它們作爲單獨的條件語句添加的情況?如...

SELECT `col1`, `col2` 
FROM `table1` 
WHERE (`col1`, `col2`) IN ((1, "ROW1"), ...) OR (`col1`=2 AND `col2` IS NULL) OR ... 

有沒有更乾淨的方法去做到這一點?

回答

3

雖然不是一個很好的解決方案,但你可以嘗試,雖然這

SELECT 
`col1`, `col2` 
FROM 
`table1` 
WHERE 
(`col1`, `col2`) IN ((1, "ROW1"), (2, "ROW2")) 
OR 
(`col1` IN (2,4) and col2 is null) 
+1

肯定有很多更清潔。我會在接受之前看看其他人提出的。 –