我编写了这段代码来查找重复项,它工作得很好:
SELECT *
FROM StyleTable
GROUP BY Color
HAVING count(*) > 1
问题是,它只返回重复行之一。是否可以返回所有重复的行?我猜这可能与“GROUP BY”有关,但我不确定如何更改它。我不想删除这些值,只是返回它们。
你必须再次加入表才能获得我认为的重复项。比如:
SELECT *
FROM StyleTable
WHERE Color IN (
SELECT Color
FROM StyleTable
GROUP BY Color
HAVING count(*) > 1
)
SELECT s.*
FROM StyleTable s
INNER JOIN (SELECT Color
FROM StyleTable
GROUP BY Color
HAVING COUNT(*) > 1) q
ON s.Color = q.Color
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
我遇到了类似的问题,并使用 CTE 仅选择给定列具有多个条目的行。
表中
Bread
和Butter
有多行;巧克力是独一无二的。
创建表格
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
);