【发布时间】:2017-02-12 03:52:01
【问题描述】:
我的问题是我们如何删除主键行以防它被重复。其他字段可能/可能不会重复。我只对被复制的主键感兴趣,并希望在删除其他重复条目时保留第一个实例。
例如,
我有 2 个包含以下数据的表:
表 1:- 投资组合
列:- PortfolioID(PK)、PortfolioName
样本数据:-
1,北美
2、欧洲
3、亚洲
表 2:- 帐户
列:- AccountID(PK)、PortfolioID(FK)、AccountName
样本数据:-
1,1,地震
1,1,风
2,1,火
3,1,地震
4,2,洪水
5,2,风
假设 PortfolioID = 1, 我正在尝试从 Account 表中删除第 2 行,其中 AccountID 1 重复 PortfolioID =1。我尝试使用 CTE 表达式,其中使用 ROW_NUMBER 语句并尝试删除 ROWNUMBER 1。但此查询不起作用,因为它删除了表中的所有行。
我尝试的查询:
WITH CTE AS
(
SELECT ROW_NUMBER() OVER (PARTITION BY [Account].[AccountID] ORDER BY [Account].[AccountID]) AS [ROWNUMBER],
[Account].[AccountID]
FROM [Account]
INNER JOIN [Portfolio] ON [Portfolio].[PortfolioID] = [Account]. [PortfolioID]
WHERE [Portfolio].[PortfolioID] = 1
)
DELETE [Account]
FROM [CTE]
WHERE [ROWNUMBER] <> 1
我在查询中做错了吗?提前感谢您的帮助。
【问题讨论】:
-
主键列怎么会有重复值?你确定你的问题吗?
-
AccountID 显然不是表的主键,否则根本不可能有重复项。但是,到目前为止,我无法在您的查询中发现任何错误。
标签: sql duplicates rows