具有NULL值的复合IN子句

时间:2013-11-26 10:54:32

标签: mysql

我想使用IN子句进行搜索,因为它看起来比加载ANDOR更干净。我将使用复合键进行此搜索。例如,我有一个包含两列的表table1col1 int(12) NOT NULLcol2 varchar(15) NULL。我使用以下查询来提取数据:

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 ...

有更清洁的方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:3)

虽然不是一个好的解决方案,但你可以试试这个

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