首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL where返回数据不为空的行。

SQL where返回数据不为空的行。
EN

Stack Overflow用户
提问于 2018-04-20 15:57:54
回答 4查看 118关注 0票数 1

我试图获得开始日期高于当前日期或结束日期高于当前日期和白皮书列为null的所有行。

出于某种原因,这个sql返回我所期望的--除了它还返回白皮书不为空的行,如果我回头说白皮书是非空的,那么它将像预期的那样返回所有的东西--所有的白纸不是空的,而不是白纸是空的?

“和”不应该指定必须完全填充吗?

SQL

代码语言:javascript
复制
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
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-04-20 16:09:56

就像其他人告诉你的那样,你必须在OR条件下使用括号。

为什么?因为OR的优先级低于和

没有括号,您的查询实际上是

代码语言:javascript
复制
 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
EN

Stack Overflow用户

发布于 2018-04-20 15:59:36

您的OR应该在()中使用,尝试使用以下方法:

代码语言:javascript
复制
 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
EN

Stack Overflow用户

发布于 2018-04-20 16:00:38

尝试将您的OR值放在括号中:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49945593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档