我想使用IN
子句进行搜索,因为它看起来比加载AND
和OR
更干净。我将使用复合键进行此搜索。例如,我有一个包含两列的表table1
:col1 int(12) NOT NULL
和col2 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 ...
有更清洁的方法可以做到这一点吗?
答案 0 :(得分:3)
虽然不是一个好的解决方案,但你可以试试这个
SELECT
`col1`, `col2`
FROM
`table1`
WHERE
(`col1`, `col2`) IN ((1, "ROW1"), (2, "ROW2"))
OR
(`col1` IN (2,4) and col2 is null)