2017-07-20 57 views
0

这是我的记录。如何删除只有一列sql中重复的行?

我只是想

PACK删除记录=“1`S”

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

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

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

注:我只替换删除与SELECT

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

如果您有任何疑问,请只问。谢谢!

+2

哪个数据库? – Rams

+3

这里的大多数人都想要格式化文本,而不是图像或指向图像的链接。 – jarlh

+0

你的努力是什么? –

回答

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 (select * from table1) other替换from table1 other

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'; 
+0

这对t-sql也是一样的 – dbajtr

+0

这不是PL/SQL。 PL/SQL是内置于DBMS中的Oracle编程语言。你展示的是SQL。 –

+0

“PL/SQL是SQL与编程语言的过程特征的结合。”我想强调的是,这是Oracle DBMS的语法。 –

0

INNER JOIN表上本身的ID字段是不是由加盟发现ID字段较大的限制。如果没有重复,则不会有任何结果。如果有重复,最近添加的内容将被删除。