如何正确实现两张表中一对列的非包含SQL查询?
修正你的多列NOT IN查询语句
嘿Julie,你的SQL语句有几个语法和逻辑上的小问题,我来帮你梳理并修正~
首先先说说原语句的问题:
- 列选择部分
select column1 column2缺少逗号,数据库会把column2当成column1的别名,完全偏离了你要同时选两列的需求; - WHERE子句里单独写
column1没有任何比较条件,属于语法错误,数据库无法识别这个条件; - 多列使用
NOT IN时,子查询里的列同样需要逗号分隔,并且要把主查询和子查询的多列都用括号包裹成一个整体,才能正确匹配。
方案1:支持多列IN的数据库写法
如果你的数据库(比如PostgreSQL、Oracle、MySQL 8.0+等)支持多列IN语法,修正后的语句是这样的:
SELECT column1, column2 FROM table1 WHERE (column1, column2) NOT IN ( SELECT column1, column2 FROM table2 );
方案2:兼容性更好的EXISTS写法
有些旧版本数据库(比如MySQL 5.x)不支持多列IN,而且当table2中column1或column2存在NULL值时,NOT IN会返回意外的空结果。这种情况下更推荐用NOT EXISTS写法,兼容性和可靠性都更强:
SELECT column1, column2 FROM table1 t1 WHERE NOT EXISTS ( SELECT 1 FROM table2 t2 WHERE t2.column1 = t1.column1 AND t2.column2 = t1.column2 );
内容的提问来源于stack exchange,提问作者joliejulie
相关产品推荐
相关产品推荐

