我试图获得开始日期高于当前日期或结束日期高于当前日期和白皮书列为null的所有行。
出于某种原因,这个sql返回我所期望的--除了它还返回白皮书不为空的行,如果我回头说白皮书是非空的,那么它将像预期的那样返回所有的东西--所有的白纸不是空的,而不是白纸是空的?
“和”不应该指定必须完全填充吗?
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发布于 2018-04-20 16:09:56
就像其他人告诉你的那样,你必须在OR条件下使用括号。
为什么?因为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发布于 2018-04-20 15:59:36
您的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发布于 2018-04-20 16:00:38
尝试将您的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 10https://stackoverflow.com/questions/49945593
复制相似问题