SQL Server 2008 R2:选择另一个 table 中存在的记录

SQL Server 2008 R2: selecting record which are present in another table

我有一个主要的 table tbl_user 和一个临时的 table tbl_user_temptbl_user 包含一些重复的记录,因此我使用以下查询将这些记录移动到临时 table:

INSERT INTO tbl_user_temp
   SELECT    
      *    
   FROM    
      tbl_user    
   GROUP BY     
      fullname, username, password    
   HAVING 
      COUNT(*) > 1

现在我想做的是从 tbl_user 中删除存在于 tbl_user_temp

中的记录

我正在使用 SQL Server 2008 R2。

暂时不需要table:

delete  u
from    (
        select  row_number() over (
                    partition by fullname, username, password
                    order by newid()) as rn
        from    tbl_user
        ) u
where   rn > 1

Example at SQL Fiddle.

我猜您想从主 table 中删除所有重复记录。 此解决方案允许您从每组重复项中删除一行(而不是一次只处理一个重复项块):

;WITH x AS 
(
  SELECT username, rn = ROW_NUMBER() OVER (PARTITION BY 
    fullname,username,password  
    ORDER BY username)
  FROM dbo.tbl_user    
)
DELETE x WHERE rn > 1;

Row_Number() 将生成分区明智的行号。对于每个相同的组,行号将在那里。 在 DELETE x WHERE rn > 1; 那里,它将检查行号是否大于 1,它将删除该行。如果您只是使用 Select 代替 delete 查询,您将看到它是如何生成行号的。