SQL Server 2008 R2:选择另一个 table 中存在的记录
SQL Server 2008 R2: selecting record which are present in another table
我有一个主要的 table tbl_user
和一个临时的 table tbl_user_temp
。
tbl_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
我猜您想从主 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
查询,您将看到它是如何生成行号的。
我有一个主要的 table tbl_user
和一个临时的 table tbl_user_temp
。
tbl_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
我猜您想从主 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
查询,您将看到它是如何生成行号的。