如何在SQL中编写正确的复合条件查询?实例修正需求
正确SQL查询语句实现需求
原始数据表格
| Id | Name | course | faculty |
|---|---|---|---|
| 1 | Ben | 1 | s |
| 2 | Ben | 1 | t |
| 3 | Ben | 2 | s |
| 4 | Tom | 1 | s |
需求说明
查询姓名为Ben,且未就读faculty为s的course 1的记录,期望结果是Id为2和3的行。
原语句错误分析
原语句:
SELECT * FROM table WHERE Name = "Ben" AND course <> 1 AND faculty <> "s"
错误在于用AND同时限制course <> 1和faculty <> "s",这会过滤掉所有course=1或者faculty=s的Ben记录,而我们要排除的只是同时满足course=1且faculty=s的Ben记录,不是分开排除。
正确的SQL语句
写法一:使用NOT排除特定组合
SELECT * FROM table WHERE Name = "Ben" AND NOT (course = 1 AND faculty = "s")
这种写法直接明确排除“course为1且faculty为s”的Ben记录,完全匹配需求逻辑。
写法二:用OR拆分否定条件(德摩根定律转换)
根据德摩根定律,NOT (A AND B)等价于NOT A OR NOT B,因此也可以写成:
SELECT * FROM table WHERE Name = "Ben" AND (course <> 1 OR faculty <> "s")
两种写法效果完全一致,都能得到Id为2和3的目标记录。
内容的提问来源于stack exchange,提问作者Ростислав Романець
相关产品推荐
相关产品推荐

