我想使用IN
子句进行搜索,因为它看起来比加载AND
和OR
s更干净。我将使用复合键进行搜索。例如,我有一个表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 ...
有没有更干净的方法来做这件事?
虽然不是一个好的解决方案,但您可以尝试此
SELECT
`col1`, `col2`
FROM
`table1`
WHERE
(`col1`, `col2`) IN ((1, "ROW1"), (2, "ROW2"))
OR
(`col1` IN (2,4) and col2 is null)