PostgreSQL中如何查询全量队名表存在但筛选队名表不存在的队伍名称
PostgreSQL 差集查询实现方案
注意事项
你提供的两张表字段名包含空格,PostgreSQL中引用带特殊字符的字段需要用双引号包裹,以下SQL可直接适配该命名规则,使用时把表1、表2替换为你实际的表名即可。
方案1:NOT EXISTS 写法(推荐,大表性能最优)
SELECT t1."team name" FROM 表1 t1 WHERE NOT EXISTS ( SELECT 1 FROM 表2 t2 WHERE t2."team title" = t1."team name" );
逻辑是逐行校验表1的队伍,只要表2找不到完全匹配的记录就保留结果,不会自动去重,表1如果有重复的同名队伍会原样返回,适配绝大多数业务场景。
方案2:LEFT JOIN 空值过滤写法
SELECT t1."team name" FROM 表1 t1 LEFT JOIN 表2 t2 ON t1."team name" = t2."team title" WHERE t2."team title" IS NULL;
先对两张表做左连接,关联不上的记录的表2字段会为NULL,过滤这部分即可拿到仅在表1存在的队伍,逻辑直观好理解,适合小表查询或者需要同时携带表1其他字段的场景。
方案3:EXCEPT 集合运算写法
SELECT "team name" FROM 表1 EXCEPT SELECT "team title" FROM 表2;
直接调用PostgreSQL支持的集合差集运算,会自动对结果去重,如果表1有重复的同名队伍,最终结果只会返回一次,适合需要去重的场景。
以上三种方案运行后均会返回你需要的team5、team6、team10三条结果。
内容的提问来源于stack exchange,提问作者Chandana Avadhani
相关产品推荐
相关产品推荐

