我知道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 '%'
所以这更像是一个偏离主题的对不起
答案 0 :(得分:5)
尝试
select
*
from
`titles_and_tags`
WHERE
`title` LIKE "title%" AND
(`tag` = "tag1" OR `tag` IS NULL)
您将通配符%
从like
中删除,另外为了清楚起见,您应该在括号中括起or
子句,并将逻辑明确地组合在一起,以确保它在你想要的方式。
修改强>
在您的修改中tag like '%'
将匹配标记不是null
的所有行。 is
或not 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)