如何提取Table1中不存在于Table2的行?NOT EXISTS查询无输出
如何查询Table1中不存在于Table2的行?
你之前写的SQL没返回结果,是因为NOT EXISTS的用法错误——你没指定两个表之间的匹配条件,只要Table2里有数据,这个条件就永远不成立,自然查不到东西。
以下是几种正确的查询方法,都能得到你要的目标结果:
方法1:使用NOT EXISTS(推荐,性能较好)
SELECT t1.* FROM table1 t1 WHERE NOT EXISTS ( SELECT 1 -- 用1代替*更高效,数据库无需返回具体字段 FROM table2 t2 -- 关联三个字段,判断Table2中是否存在完全匹配的行 WHERE t2.Team = t1.Team AND t2.Type = t1.Type AND t2.Product = t1.Product );
方法2:使用LEFT JOIN + IS NULL
SELECT t1.* FROM table1 t1 LEFT JOIN table2 t2 ON t2.Team = t1.Team AND t2.Type = t1.Type AND t2.Product = t1.Product -- 过滤出Table2中没有匹配到的行(匹配不到时t2的字段会是NULL) WHERE t2.Team IS NULL;
方法3:使用EXCEPT(部分数据库支持)
如果你的数据库支持EXCEPT语法(比如SQL Server、PostgreSQL),可以用更简洁的写法:
SELECT Team, Type, Product FROM table1 EXCEPT SELECT Team, Type, Product FROM table2;
EXCEPT会自动返回第一个查询有但第二个查询没有的记录,它默认会去重,不过你的场景里数据都是唯一的,不会影响结果。
内容的提问来源于stack exchange,提问作者Data_Marketing_
相关产品推荐
相关产品推荐

