5

以下のクエリを実行して、次のような複数の列に基づいて「重複」行を見つけることができることを知っています。

SELECT      PosId, OrgId
FROM        PosOrg
GROUP BY    PosId, OrgId
HAVING COUNT(*) > 1

しかし、今は重複行を削除したいので、上記のクエリはゼロ行を返します。どの行を削除するかは気にしません (これら 2 つの列の一意性に基づいて 1 つの行だけが残る限り.

SQLでこれらの重複を削除する正しい方法は何ですか?

4

2 に答える 2

8

別の一意のid列がある場合は、次のことができます

delete from PosOrg
where id not in
(
  SELECT      min(id)
  FROM        PosOrg
  GROUP BY    PosId, OrgId
)
于 2014-08-24T23:45:43.817 に答える
5
;WITH CTE
AS (
    SELECT PosId
          ,OrgId
          ,ROW_NUMBER() OVER (PARTITION BY PosId , OrgId ORDER BY PosId , OrgId) rn
    FROM   PosOrg
   )
DELETE FROM CTE
WHERE rn > 1
于 2014-08-24T23:50:38.187 に答える