返回所有重复行

问题描述 投票:0回答:4

我编写了这段代码来查找重复项,它工作得很好:

SELECT *
FROM StyleTable 
GROUP BY Color
HAVING count(*) > 1 

问题是,它只返回重复行之一。是否可以返回所有重复的行?我猜这可能与“GROUP BY”有关,但我不确定如何更改它。我不想删除这些值,只是返回它们。

sql sqlite select group-by duplicates
4个回答
26
投票

你必须再次加入表才能获得我认为的重复项。比如:

SELECT * 
FROM StyleTable 
WHERE Color IN (
  SELECT Color  
  FROM StyleTable   
  GROUP BY Color  
  HAVING count(*) > 1 
)     

7
投票
SELECT s.*
    FROM StyleTable s
        INNER JOIN (SELECT Color
                        FROM StyleTable
                        GROUP BY Color
                        HAVING COUNT(*) > 1) q
            ON s.Color = q.Color

1
投票
WITH cte AS ( SELECT FirstName, LastName,COUNT(*) occurrences FROM Customer GROUP BY FirstName, LastName HAVING COUNT(*) > 1)
SELECT * FROM Customer INNER JOIN cte ON 
        cte.FirstName = Customer.FirstName AND 
        cte.LastName = Customer.LastName
ORDER BY Customer.FirstName, Customer.LastName

0
投票

我遇到了类似的问题,并使用 CTE 仅选择给定列具有多个条目的行。

表中

Bread
Butter
有多行;巧克力是独一无二的。

演示查询仅返回重复行

用于重新创建示例的 SQL 语句

创建表格

CREATE TABLE Duplicates 
(
   ProductID INTEGER PRIMARY KEY AUTOINCREMENT,
   Name TEXT,
   Price REAL
);

插入一些记录

INSERT INTO Duplicates (Name, Price) VALUES ('Bread', '1.01');
INSERT INTO Duplicates (Name, Price) VALUES ('Chocolate', '3.03');
INSERT INTO Duplicates (Name, Price) VALUES ('Bread', '10.20');
INSERT INTO Duplicates (Name, Price) VALUES ('Butter', '2.02');
INSERT INTO Duplicates (Name, Price) VALUES ('Cherry', '7.03');
INSERT INTO Duplicates (Name, Price) VALUES ('Butter', '20.20');

查询

WITH CTE AS (
    SELECT Name, Price FROM Duplicates
)
SELECT * FROM CTE 
         WHERE Name in (
               SELECT Name FROM Duplicates 
               Group BY Name HAVING Count(Name)>1
         );
© www.soinside.com 2019 - 2024. All rights reserved.