SQL分组查询结果不符预期,如何修正以获取目标数据?
修正SQL以获取存在code=1记录的name的全部数据
你的原始SQL有两个明显问题:一是没写FROM子句指定要查询的表,二是逻辑上直接过滤code=1只能拿到该code对应的记录,没法获取这些name的所有数据。
要实现需求,得先找出所有存在code=1记录的name,再提取这些name的全部数据,下面是几种可行的写法:
方法1:子查询+IN
SELECT name, code FROM 你的表名 WHERE name IN ( SELECT DISTINCT name FROM 你的表名 WHERE code = 1 );
方法2:EXISTS子查询(推荐,性能更优)
SELECT t1.name, t1.code FROM 你的表名 t1 WHERE EXISTS ( SELECT 1 FROM 你的表名 t2 WHERE t2.name = t1.name AND t2.code = 1 );
方法3:自连接
SELECT DISTINCT t1.name, t1.code FROM 你的表名 t1 JOIN 你的表名 t2 ON t1.name = t2.name WHERE t2.code = 1;
注意事项
- 把代码里的
你的表名替换成你实际使用的表名称 - 自连接的写法需要加
DISTINCT,避免原表存在重复name+code组合时返回重复记录 - 大多数场景下,EXISTS的执行效率会比IN更高,尤其是数据量较大的时候
内容的提问来源于stack exchange,提问作者mike
相关产品推荐
相关产品推荐

