0

我有一个奇怪的问题。我在公司的 sql 数据库中添加了一些不需要的值。如何从我的 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
4

3 回答 3

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”)。

于 2013-02-15T16:30:39.917 回答
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为样本中的最低值。

这是一个演示

于 2013-02-15T16:31:24.077 回答
1

因为我们不知道您要保留哪些记录,所以很难回答您的问题。如果您想保留按前两列分组的第一条记录,那么这将是关闭的——尽管不能保证:

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

于 2013-02-15T16:36:46.027 回答