通过sql查询删除一列的重复值

时间:2016-09-08 12:17:17

标签: sql sql-server duplicates

我有一个包含两列的表,一列的值为null,另一列有许多重复的值和空白。如何通过查询从该列中删除重复的值和空白?

6 个答案:

答案 0 :(得分:2)

您可以使用临时表执行此任务,如下所示:

SELECT DISTINCT * INTO #tmpTable FROM MyTable
TRUNCATE TABLE MyTable
INSERT INTO MyTable SELECT * FROM #tmpTable

答案 1 :(得分:0)

您可以创建表的空副本。然后运行INSERT INTO new_table SELECT DISTINCT * FROM old_table。最后,删除旧表并重命名新表。

答案 2 :(得分:0)

这样做的一种方法 - 使用CTE

create table #dups (col1 int, col2 int)
insert into #dups
select null,null union all
select null,1 union all
select null,1 union all
select null,1 union all
select null,2 union all
select null,2 union all
select null,3 union all
select null,null
select * from #dups
;WITH cte
     AS (SELECT col1,col2,ROW_NUMBER() OVER (PARTITION BY  Col1,Col2 
                                       ORDER BY ( SELECT 0)) RN
         FROM   #dups
        )
DELETE FROM cte
WHERE  RN > 1 OR col2 is null

答案 3 :(得分:0)

1)如果你想保持id值最低的行:

DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name

2)如果你想保留id值最高的行:

DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name

请在处理之前获取您的表的副本。 如果没有给我发送表名,我会替换你的表名。

使用MySQL 5.1进行测试

不确定其他版本 看到链接

Delete all Duplicate Rows except for One in MySQL?

答案 4 :(得分:0)

如果我理解正确,你想避免使用column2 NULL和空白吗?

SELECT COLUMN1, COLUMN2 FROM TABLE 
GROUP BY
  COLUMN1, COLUMN2 
WHERE
  COLUMN2 NOT NULL AND COULMN2 <> ''

仅当COLUMN2有一些数据时,此查询才会显示结果。

答案 5 :(得分:0)

试试这个

DELETE FROM [Table]
WHERE     (ColmnB IN
                      (SELECT     ColumnB
                         FROM         [Table] AS Table_1
                         GROUP BY ColumnB
                         HAVING      (COUNT(*) > 1))) OR
                  (RTRIM(LTRIM(ISNULL(ColumnB,''))) = '')

表有拖曳列。第一列是空值。第二列有重复值和空白值。

相关问题