我有一个奇怪的问题。我已经在我的公司sql db中添加了一些不需要的值。如何从我的sql表中删除。
columnA ColumnB ColumnC ColumnD ColumnE
1 22 3332
2 11 5543
3 11 4444
4 11 1234
4 11 1344
4 11 5666
一定是
columnA ColumnB ColumnC ColumnD ColumnE
1 22 3332
2 11 5543
3 11 4444
4 11 1234
答案 0 :(得分:4)
所以你要删除最后两行?只需创建符合您想要删除的条件的删除语句(因为它看起来您没有复制任何现有数据):
DELETE FROM MyTable
WHERE ColumnA = 4
AND ColumnB = 11
AND ColumnC = 1344
DELETE FROM MyTable
WHERE ColumnA = 4
AND ColumnB = 11
AND ColumnC = 5666
(当然用你桌子的实际名称替换“MyTable”,你没有提供)。
答案 1 :(得分:4)
使用CTE和ROW_NUMBER
功能
WITH CTE AS
(
SELECT columnA, ColumnB, ColumnC, ColumnD, ColumnE,
RN = ROW_NUMBER()OVER(PARTITION BY columnA, ColumnB ORDER BY ColumnC)
FROM dbo.TableName
)
DELETE FROM CTE WHERE RN > 1
这假设重复项由前两列确定,并且您希望将其保留为样本中的最低ColumnC
值。
这是Demo。
答案 2 :(得分:1)
因为我们不知道您要保留哪些记录,所以很难回答您的问题。如果你想保留按前2列分组的第一条记录,那么这将是接近的 - 尽管不能保证:
WITH CTE AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY col1,col2 ORDER BY (SELECT NULL)) RN
FROM YourTable
)
DELETE FROM CTE WHERE RN<>1
如果您有另一个字段(例如Tim Schmelter的答案),那么请使用它而不是SELECT NULL。
这是一个小提琴,展示了剩下的内容:http://sqlfiddle.com/#!3/29aec/4