如何删除只有一列在sql中重复的行?

时间:2017-07-20 07:41:55

标签: sql

这是我的记录。

我只想用

删除记录

PACK =' 1`S'

但如果该行没有任何重复,即使其PACK等于' 1`S'它会保留。

我唯一能做的就是检查有重复的记录。 并删除PACK = 1&#39的记录。

SELECT Name, COUNT(*) as duplicates FROM table1 Group by Name having COUNT(*) >1 Order by duplicates

注意:我只是用select替换删除。

SELECT * FROM table1 WHERE PACK = '1's'

3 个答案:

答案 0 :(得分:0)

也许这个pl / sql可以指导你:

Delete from table1
    where id not in (select min(id) 
                         from table1
                         where pack = '1`S'
                         group by name
                         having count(*) = 1
                    )
          and pack = '1`S';

答案 1 :(得分:0)

INNER将表格连接到自身,并限制ID字段大于连接找到的ID字段。如果没有重复,则不会有任何结果。如果有重复项,则最近添加的内容将被删除。

答案 2 :(得分:0)

因此,您要删除存在的任何1`S记录,这些记录具有相同的名称和类别以及另一个包。您可以在SQL中说出这一点:

delete from table1
where pack = '1`S' 
and exists
(
  select *
  from table1 other
  where other.name     =  table1.name
    and other.category =  table1.category
    and other.pack     <> table1.pack
);

这是标准SQL,应该适用于每个DBMS。 MySQL是臭名昭着的例外,因为它们禁止再次在子查询中直接使用更新的表。在这里,您必须将from table1 other替换为from (select * from table1) other