这是我的记录。
我只想用
删除记录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'
答案 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
。