2016-04-26 86 views
1

我写了一个查询 从表1,其中TABLEID删除(由具有数TABLEID(*)> 1,从表1组中选择TABLEID) 但此查询删除一个单一查询所有的数据已经计数大于1我想这会删除我的数据库重复条目

有人可以帮助我与删除重复数据和单一的在线查询,复位计数为1

我有表Table1

Tableid Count 

1  10 

2  2 

3  1 

4  NULL 

5  31 

帖子删除它应该是

Tableid Count 
1  1 

2  1 

3  1 

4  NULL 

5  1 

回答

1

我认为这是你在找什么

DECLARE @Table TABLE 
( 
    Name VARCHAR(20), 
    Value INT 
); 

;WITH T AS (
    SELECT CONCAT('a',1) AS Name, 1 AS Value 
    UNION ALL 
    SELECT CONCAT('a',T.Value + 1) AS Name, T.Value + 1 FROM T 
    WHERE T.Value < 5 
) 
INSERT INTO @Table 
SELECT T.Name , 
     T.Value 
FROM T 


INSERT INTO @Table 
     (Name, Value) 
VALUES ('a5', -- Name - varchar(20) 
      5 -- Value - int 
     ),('a5', -- Name - varchar(20) 
      5 -- Value - int 
     ) 

INSERT INTO @Table 
SELECT * FROM @Table 

INSERT INTO @Table 
SELECT * FROM @Table 

SELECT 
    COUNT(*) AS TotalCount 
    , Name 
    , Value 
FROM 
    @Table 
GROUP BY 
    Name , 
    Value 
ORDER BY 
    Name 



DELETE T 
FROM (
    SELECT 
     Name 
     , Value 
     , ROW_NUMBER() OVER(PARTITION BY Name, Value ORDER BY Value) AS RN 
    FROM 
     @Table 
) AS T 
WHERE T.RN > 1 


SELECT * FROM @Table ORDER BY Name, Value 
+0

注意:CONCAT()可能不适用于低于2012的SQL Server版本。 –

0
  1. 排序数据按字母或数字顺序。
  2. 检查当前字段是否等于先前的字段。
  3. 删除相同。
+0

我能得到它单行查询 – User008

+0

试试这个:http://stackoverflow.com/questions/3317433/delete-duplicate -records-in-sql-server –

1

要删除所有重复数据:对可能具有相同数据的列进行分组。

DELETE FROM table 
WHERE id IN (SELECT id FROM table GROUP BY column HAVING COUNT(column) > 1) 

要删除重复的,并保持它的一个:获取至少(1)从重复和分组列数据。

DELETE t1 FROM table t1, table t2 
WHERE t1.id <> t2.id AND t1.column = t2.column 

在测试任何东西之前先备份数据。

0

我建议在这里使用select查询,而不是delete

select tableId,case when count >1 then (count-(count-1)) 
        else count 
       end as count 
from table 1; 
0

试试这个

DELETE FROM Table1 
     WHERE Tableid IN (SELECT Tableid FROM Table1 GROUP BY Tableid HAVING COUNT(*) > 1) 
+0

它与我发布的相同查询有问题。您发布的查询中的 – User008

+0

是由“表ID”组成的,您是否注意到了这一点? @RaunakMaskay – JYoThI

0

您还可以设置在哪里都使该行唯一与该领域的各式独特的键KEYWORD IGNORE。

它将创建一个唯一的密钥并删除直接重复。

ALTER IGNORE TABLE mytable 
ADD UNIQUE KEY (Tableid);