PostgreSQL查询:筛选含org='A'且对应id有多条记录的所有数据
筛选存在org='A'的id对应全部记录的正确SQL实现
你当前的SQL语句逻辑完全偏离需求,WHERE和HAVING用法错误,且分组聚合的逻辑和目标筛选要求不相关。以下是几种能满足需求的PostgreSQL实现方案:
方法一:子查询+IN
先通过子查询提取所有存在org='A'的id,再匹配主表中这些id对应的所有记录:
SELECT id, name, state, org FROM names WHERE id IN (SELECT id FROM names WHERE org = 'A');
方法二:EXISTS关联查询
通过关联子查询检查当前记录的id是否存在org='A'的条目,存在则保留该记录,适合大表且id字段有索引的场景:
SELECT n1.id, n1.name, n1.state, n1.org FROM names n1 WHERE EXISTS ( SELECT 1 FROM names n2 WHERE n2.id = n1.id AND n2.org = 'A' );
方法三:INNER JOIN
先获取包含org='A'的唯一id集合,再与原表关联获取全量记录,DISTINCT用于避免关联后出现重复(若id为主键可省略):
SELECT DISTINCT n1.id, n1.name, n1.state, n1.org FROM names n1 INNER JOIN (SELECT DISTINCT id FROM names WHERE org = 'A') n2 ON n1.id = n2.id;
内容的提问来源于stack exchange,提问作者CWZY
相关产品推荐
相关产品推荐

