我试图获取开始日期高于当前日期或结束日期高于当前日期且白皮书列为空的所有行。
由于某种原因,这个sql返回我期望的内容除了它还返回白皮书为非NULL的行,如果我转动sql并说白皮书非NOT NULL它将返回所有那些白皮书不为null的所有内容而不是白皮书为空的那些?
'和'它是否应该指明必须填满?
SQL
SELECT id,
name,
whitepaper,
date_start,
date_end
FROM approved
WHERE date_start >= CURDATE() OR date_end >= CURDATE()
AND whitepaper IS NULL
ORDER BY date_end DESC
LIMIT 10
答案 0 :(得分:2)
正如其他人告诉你的那样,你必须在OR条件周围使用括号。
为什么? Because the OR has a lower priority than AND
没有括号,您的查询实际上是
SELECT id,
name,
whitepaper,
date_start,
date_end FROM approved
WHERE date_start >= CURDATE()
OR
(
date_end >= CURDATE()
AND
whitepaper IS NULL
)
ORDER BY date_end DESC LIMIT 10
答案 1 :(得分:1)
OR
应该在()
中,请尝试以下内容:
SELECT id, name, whitepaper, date_start, date_end
FROM approved
WHERE (date_start >= CURDATE() OR date_end >= CURDATE())
AND whitepaper IS NULL
ORDER BY date_end DESC LIMIT 10
答案 2 :(得分:1)
尝试将OR放在括号中:
SELECT id, name, whitepaper, date_start, date_end
FROM approved
WHERE (date_start >= CURDATE() OR date_end >= CURDATE()) AND whitepaper IS NULL
ORDER BY date_end DESC LIMIT 10
答案 3 :(得分:0)
你可以和表达一起使用你也可以在whitepaper字段中检查空数据这里是我的建议SELECT id, name, whitepaper, date_start, date_end FROM approved WHERE (date_start >= CURDATE() OR date_end >= CURDATE()) AND (ISNULL(whitepaper) or whitepaper='') ORDER BY date_end DESC LIMIT 10