有没有可能在不使用或的情况下对MySQL中的空字符串和空值执行select操作?
这一点:
select * from table where col IN (null, "");
不起作用,它会忽略null (或者可能将其与字符串“null”匹配)。
发布于 2010-01-27 23:01:32
SELECT *
FROM mytable
WHERE COALESCE(col, '') = ''
但是,请注意,如果对列进行索引,则OR
查询的效率会更高:
SELECT *
FROM mytable
WHERE col = '' OR col IS NULL
这将在索引上使用ref_or_null
访问路径。
如果您需要从值列表和NULLs
中进行选择,只需将所有非空值放入列表中,并添加单个OR IS NULL
条件:
SELECT *
FROM mytable
WHERE col IN ('val1', 'val2', 'val3') OR col IS NULL
这也将使用col
上的索引。
发布于 2021-10-20 14:36:46
以防其他人像我一样寻找此解决方案;如果要按多个列进行搜索,则需要将where/或语句分组在括号中。
这不会返回您预期的结果:
SELECT *
FROM table
WHERE col1 IN ('val1', 'val2') OR col1 IS NULL AND col2 IN ('val3', 'val4')
"OR col1 IS NULL“将完全覆盖您的"AND col2 IN”语句。
把col1的所有条件都放在括号里就行了:
SELECT *
FROM table
WHERE (col1 IN ('val1', 'val2') OR col1 IS NULL) AND col2 IN ('val3', 'val4')
我花了一段时间来考虑这样做,因为(至少在我的经验中)你通常不会把WHERE语句放在括号里。
https://stackoverflow.com/questions/2147824
复制相似问题