Mysql:从表中选择*,其中col IN(null,"")可能没有OR

pvg*_*ijn 25 mysql null

是不是在某种程度上可以在Mysql中选择空字符串和NULL值而不使用或?

这个:

   select * from table where col IN (null, "");
Run Code Online (Sandbox Code Playgroud)

不起作用,它忽略null(或者可能与字符串'null'匹配)

谢谢,PV Goddijn

Qua*_*noi 35

SELECT  *
FROM    mytable
WHERE   COALESCE(col, '') = ''
Run Code Online (Sandbox Code Playgroud)

但是,请注意,OR如果列被索引,则查询将更有效:

SELECT  *
FROM    mytable
WHERE   col = '' OR col IS NULL
Run Code Online (Sandbox Code Playgroud)

这将使用ref_or_null索引上的访问路径.

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

SELECT  *
FROM    mytable
WHERE   col IN ('val1', 'val2', 'val3') OR col IS NULL
Run Code Online (Sandbox Code Playgroud)

这也将使用索引col.

  • @henno:`col IN(NULL)`永远不会匹配,即使`col`是null.它不取决于它是否使用索引. (4认同)
  • @MaxWilliams:原因是SQL就是这样设计的。`NULL = NULL` 不是 true 或 false,而是 NULL。如果你执行这样的查询:`SELECT * FROM mytable WHERE col = NULL`,它永远不会返回任何记录,甚至不会返回`col`值设置为NULL的记录。所有 SQL 数据库的行为都是如此,而不仅仅是 MySQL。 (2认同)