MySQL:获取null或空字符串

时间:2010-06-13 20:29:14

标签: mysql

我知道NULL值和空字符串("")值之间的区别是什么,但如果我想使用OR关键字获取值,我就得不到NULL值的结果

我要查询的表格如下:

 titles_and_tags
+----+----------+------+
| id | title    | tag  |
+----+----------+------+
|  1 | title1   | NULL |
|  2 | title2   | tag1 |
|  3 | title3   | tag2 |
|  4 | edit     | NULL |
|  5 | rowdata  | div  |
+----+----------+------+

我使用的查询如下所示:

select * 
  from `titles_and_tags` 
 WHERE `title` LIKE "title%" 
   AND `tag` = "tag1" OR `tag` IS NULL

所以我想在这里找到一行(id:1,2),但这会产生0行。我做错了什么?

修改

抱歉,我忘记了我的主要问题是:

select * 
  from `titles_and_tags` 
WHERE `title` LIKE "title%" 
AND `tag` = "tag1" OR `tag` LIKE '%'

所以这更像是一个偏离主题的对不起

3 个答案:

答案 0 :(得分:5)

尝试

select 
  * 
from 
  `titles_and_tags`
WHERE 
  `title` LIKE "title%" AND 
  (`tag` = "tag1" OR `tag` IS NULL)

您将通配符%like中删除,另外为了清楚起见,您应该在括号中括起or子句,并将逻辑明确地组合在一起,以确保它在你想要的方式。

修改 在您的修改中tag like '%'将匹配标记不是null的所有行。 isnot is以外的任何比较均为null。我不确定你要对最后一个查询做什么,但我怀疑你原来提问的那个更像你真正想要的那个。

答案 1 :(得分:0)

根据您的评论,我的猜测是您已将字符串'NULL'或空字符串''插入数据库而不是特殊值NULL。要确认此操作,请尝试以下查询:

SELECT * 
FROM titles_and_tags
WHERE tag IN ('NULL', '')

如果这返回任何行,那就是你的问题。

答案 2 :(得分:0)

尝试(不要将列名标记包装在任何内容中。或者如果你用它们包装它们使用背景而不是单引号。如安东尼所建议的那样)

select * 
  from `titles_and_tags` 
 WHERE title LIKE "title%" 
   AND (tag = "tag1" OR tag IS NULL)