SQL WHERE (conditions) AND (condition1 OR condition2) 不起作用

Posted

技术标签:

【中文标题】SQL WHERE (conditions) AND (condition1 OR condition2) 不起作用【英文标题】:SQL WHERE (conditions) AND (condition1 OR condition2) doesn't work 【发布时间】:2015-07-30 14:55:02 【问题描述】:

我有一个 SQL 语句,如果它们属于某个用户并且只要它们的条件 1 不是 1 或条件 2 不是 1,就应该返回行。但是当我在条件 1 或条件 2 仅为 1 的情况下执行它时 - 行是还是回来了。我正在尝试做到这一点,如果条件 1 或条件 2 或两者都为 1,则不返回此类行,但由于某种原因,它仅在两个条件 = 1 时才有效

Select * FROM table1 
WHERE table1.user = $user 
AND (condition1 = 0 OR condition2 = 0)

【问题讨论】:

【参考方案1】:

您的要求是矛盾的。以下是它们各自的一些解决方案:

属于某个用户并且只要他们的condition1不是1 OR 条件 2 不是 1

如果条件1 和条件2 不可为空:

Select * FROM table1 
WHERE table1.user = $user 
AND (condition1 <> 1 OR condition2 <> 1)

如果是:

Select * FROM table1 
WHERE table1.user = $user 
AND (condition1 <> 1 OR condition2 <> 1 
    OR condition1 IS NULL OR condition2 IS NULL)

如果条件1或条件2或两者都为1则不返回

不可为空:

Select * FROM table1 
WHERE table1.user = $user 
AND condition1 <> 1 AND condition2 <> 1

可以为空:

Select * FROM table1 
WHERE table1.user = $user 
AND ((condition1 <> 1 OR condition1 IS NULL) 
    AND (condition2 <> 1 OR condition2 IS NULL))

【讨论】:

condition1 1 AND condition2 1 有效。谢谢,我会在 5 分钟内标记为答案。 发帖前没有看到你的答案;删除了我的并对此表示赞同。【参考方案2】:

你的逻辑有点倒退,试试这个:

Select * FROM table1 
WHERE table1.user = $user 
AND NOT (condition1 = 0 OR condition2 = 0)

【讨论】:

以上是关于SQL WHERE (conditions) AND (condition1 OR condition2) 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

MySQL ICP(Index Condition Pushdown)特性

What does a (+) sign mean in an Oracle SQL WHERE clause?

SQL 查询语句先执行 SELECT,Java中级程序员面试

sql查询优化策略

sql的执行顺序

sql执行顺序