查询表中重复记录失败:SQL语句无返回结果的问题求解
问题分析与解决
错误原因
你写的SQL里,子查询加了where seller = buyer的条件,但你的所有数据中Seller都是abc,buyer都是xyz,没有任何一行满足seller = buyer,所以子查询返回空集合。外层的where cost in (...)没有可匹配的cost值,自然查不到任何结果。
另外,仅靠cost字段判断重复也不准确——如果存在不同的Seller或buyer但cost相同的记录,会被错误筛选出来。你的需求是筛选Seller、buyer、cost三者组合重复的记录,所以要基于这三个字段的组合来判断。
正确SQL写法
方法1:使用窗口函数(推荐,性能较好)
SELECT ID, Seller, buyer, cost FROM ( SELECT *, COUNT(*) OVER(PARTITION BY Seller, buyer, cost) AS repeat_count FROM Table_1 ) temp WHERE repeat_count >= 2;
方法2:使用关联子查询
SELECT t1.* FROM Table_1 t1 INNER JOIN ( SELECT Seller, buyer, cost FROM Table_1 GROUP BY Seller, buyer, cost HAVING COUNT(*) >= 2 ) t2 ON t1.Seller = t2.Seller AND t1.buyer = t2.buyer AND t1.cost = t2.cost;
这两种写法都能准确筛选出你需要的重复记录,返回结果和你的期望一致。
内容的提问来源于stack exchange,提问作者user13549459
相关产品推荐
相关产品推荐

