首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MySQL: select * from table where col IN (null,"")可能没有OR

MySQL: select * from table where col IN (null,"")可能没有OR
EN

Stack Overflow用户
提问于 2010-01-27 22:56:40
回答 2查看 28.3K关注 0票数 32

有没有可能在不使用或的情况下对MySQL中的空字符串和空值执行select操作?

这一点:

代码语言:javascript
复制
   select * from table where col IN (null, "");

不起作用,它会忽略null (或者可能将其与字符串“null”匹配)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-27 23:01:32

代码语言:javascript
复制
SELECT  *
FROM    mytable
WHERE   COALESCE(col, '') = ''

但是,请注意,如果对列进行索引,则OR查询的效率会更高:

代码语言:javascript
复制
SELECT  *
FROM    mytable
WHERE   col = '' OR col IS NULL

这将在索引上使用ref_or_null访问路径。

如果您需要从值列表和NULLs中进行选择,只需将所有非空值放入列表中,并添加单个OR IS NULL条件:

代码语言:javascript
复制
SELECT  *
FROM    mytable
WHERE   col IN ('val1', 'val2', 'val3') OR col IS NULL

这也将使用col上的索引。

票数 43
EN

Stack Overflow用户

发布于 2021-10-20 14:36:46

以防其他人像我一样寻找此解决方案;如果要按多个列进行搜索,则需要将where/或语句分组在括号中。

这不会返回您预期的结果:

代码语言:javascript
复制
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的所有条件都放在括号里就行了:

代码语言:javascript
复制
SELECT * 
FROM table 
WHERE (col1 IN ('val1', 'val2') OR col1 IS NULL) AND col2 IN ('val3', 'val4') 

我花了一段时间来考虑这样做,因为(至少在我的经验中)你通常不会把WHERE语句放在括号里。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2147824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档