MySQL:获取null或空字符串

Max*_*Ruf 2 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  |
+----+----------+------+
Run Code Online (Sandbox Code Playgroud)

我使用的查询如下所示:

select * 
  from `titles_and_tags` 
 WHERE `title` LIKE "title%" 
   AND `tag` = "tag1" OR `tag` IS NULL
Run Code Online (Sandbox Code Playgroud)

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

编辑

对不起,我忘记了我的主要问题是:

select * 
  from `titles_and_tags` 
WHERE `title` LIKE "title%" 
AND `tag` = "tag1" OR `tag` LIKE '%'
Run Code Online (Sandbox Code Playgroud)

所以这更像是一个偏离主题,抱歉

Don*_*nie 5

尝试

select 
  * 
from 
  `titles_and_tags`
WHERE 
  `title` LIKE "title%" AND 
  (`tag` = "tag1" OR `tag` IS NULL)
Run Code Online (Sandbox Code Playgroud)

你离开了通配符%了你like,再加上你应该在括号括起来的or清楚和明确组逻辑在一起,以确保它在你希望的方式执行的条款.

编辑: 在您的编辑tag like '%'中将匹配标签不是的所有行null. 除值或与值之外的任何比较都是错误的.我不确定你要对最后一个查询做什么,但我怀疑你原来提问的那个更像你真正想要的那个.isnot isnull

  • +1尽管括号**对此查询很重要.示例数据并没有表现出差异.尝试插入一行(4,'nottitle',NULL),然后用括号和不用括号进行比较. (2认同)