如何删除重复项?

时间:2013-09-29 20:40:44

标签: php mysql duplicates

我有一个像这样的myqsl图表:PRIMERY KEY(ID),名称,值,日期

如果“Name AND Value AND Date”与现有行相同,我需要删除重复项。 我有一个解决方案,我在前面发现并且工作(不是100%),但我不明白它的命令,因为我只是进入BASIC mysql ...有人可以进一步解释我...

绝对是最后的x是什么?

$delDups = "delete from chart where id not in (select * from (select min(id) from chart n group by value) x)";

mysql_query($delDups);

3 个答案:

答案 0 :(得分:1)

在我看来,你可以做得更简单,就像这样:

$delDups = "delete from chart where id not in (select min(id) from chart n group by value)";

在子查询中,你是saing: “嘿,取所有值并找到值组的最小值”

因此,想象子查询的结果作为列表,如“(12,13,200)”.. NOT IN运算符将采用该列表并使用它来过滤上层查询的结果并说“给”我所有的结果,少于这个列表中的id“

我不确定我是否按预期解释了......

答案 1 :(得分:1)

您可以为所有3列添加唯一键:

ALTER IGNORE TABLE my_table
ADD CONSTRAINT uc_unic UNIQUE (Name, Value, Date)

对于那个x,mysql允许别名,为方便起见,本质上是名称快捷方式。

答案 2 :(得分:0)

您写的内容几乎可以使用,您只想将namedate添加到GROUP BY子句中。这样的事情应该做。

DELETE FROM chart
WHERE id NOT IN (
  SELECT MIN(id)
  FROM chart
  GROUP BY name, value, date)

DELETE FROM表示您要删除表中的行。 WHERE子句说明您确实要删除哪些行(错过它将删除所有内容)。括号中的子查询将查看namevaluedate的每个组合,并从每个组合中返回一个id。总而言之,DELETE现在应该删除id不是每个组最小的每一行。

希望有所帮助!

相关问题