MySQL: select * from table where col IN (null, "") 可能没有 OR
是否可以在不使用 or 的情况下在 MySQL 中对空字符串和 NULL 值进行选择?
这:
select * from table where col IN (null, "");
不起作用,它忽略 null (或者可能将其与字符串“null”匹配)。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
但请注意,如果列已建立索引,则
OR
查询的效率会高得多:这将使用索引上的
ref_or_null
访问路径。如果您需要从值列表中选择
NULL
,只需将所有非空值放入列表中并添加一个OR IS NULL
条件:这将使用还有
col
上的索引。Note, however, than
OR
query will be much more efficient if the column is indexed:This will use
ref_or_null
access path on the index.If you need to select from a list of values along with
NULLs
, just put all not-null values into the list and add a singleOR IS NULL
condition:This will use an index on
col
as well.如果其他人像我一样正在寻找这个解决方案;如果您要按多列进行搜索,则需要将 where/or 语句分组在括号中。
这不会返回您期望的结果:
“OR col1 IS NULL”将完全覆盖您的“AND col2 IN”语句。
将 col1 的所有条件放在括号内是可行的:
我花了一段时间才考虑尝试这个,因为(至少根据我的经验)你通常不会将 WHERE 语句放在括号内。
In case anyone else is looking for this solution, as I was; if you're searching by more than one column, you need to group the where/or statement in parenthesis.
This will not return the results you expect:
The "OR col1 IS NULL" will completely override your "AND col2 IN" statement.
Putting all of the conditions for col1 inside parenthesis will work:
It took me a while to consider trying this, because (at least in my experience) you don't typically put WHERE statements in parenthesis.
这对我来说很棒
That's work great for me