我有以下用于查找重复项的查询。
SELECT Namn, ServerRef
FROM TlsSignal
GROUP BY Namn, ServerRef
HAVING COUNT(*) > 1
如何编写一个select,它返回与该查询匹配的所有行(即没有分组)?
如果只是一个必须匹配的字段,我会做一个子选择,但是当两个不同的字段必须与查询的结果匹配时,我无法弄清楚如何做到这一点。
答案 0 :(得分:2)
您可以使用该查询连接回源表,如下所示:
SELECT TlsSignal.*
FROM TlsSignal
JOIN
(SELECT Namn, ServerRef
FROM TlsSignal
GROUP BY Namn, ServerRef
HAVING COUNT(*) > 1) AS Duplicates
ON TlsSignal.Namn = Duplicates.Namn AND TlsSignal.ServerRef = Duplicates.ServerRef
或者,我可能会使用这种方法。在SQL Server中,您可以使用common table expression
:
WITH Duplicates_CTE(Namn, ServerRef)
AS
(SELECT Namn, ServerRef
FROM TlsSignal
GROUP BY Namn, ServerRef
HAVING COUNT(*) > 1)
SELECT TlsSignal.*
FROM TlsSignal
JOIN Duplicates_CTE
ON TlsSignal.Namn = Duplicates_CTE.Namn
AND TlsSignal.ServerRef = Duplicates_CTE.ServerRef
答案 1 :(得分:1)
这是您正在寻找的查询:
SELECT T1.*
FROM TlsSignal T1
INNER JOIN (
SELECT Namn
,ServerRef
FROM TlsSignal
GROUP BY Namn
,ServerRef
HAVING COUNT(*) > 1
) AS T2 ON T1.Namn = T2.Namn
AND T1.ServerRef = T2.ServerRef