按查询选择与组匹配的所有项目

时间:2014-06-04 08:04:37

标签: sql sql-server

我有以下用于查找重复项的查询。

SELECT Namn, ServerRef
FROM TlsSignal
GROUP BY Namn, ServerRef
HAVING COUNT(*) > 1

如何编写一个select,它返回与该查询匹配的所有行(即没有分组)?

如果只是一个必须匹配的字段,我会做一个子选择,但是当两个不同的字段必须与查询的结果匹配时,我无法弄清楚如何做到这一点。

2 个答案:

答案 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