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?