当city_id相同时,删除MySQL表中的重复项-设置group_id


Remove duplicates in MySQL table - set group_id when city_id is the same

我的数据库中有表units。在模式I中,有字段idunit_idgroup_idcity_id

简单来说,我有3个单位:

(1, 1, 1, 1)
(2, 1, 2, 1)
(3, 1, 3, 2)

当城市id相同时,我如何删除无用的组id。我有下一个结果:

(1, 1, 1, 1)
(2, 1, 1, 1)
(3, 1, 3, 2)

我知道如何在PHP中做到这一点,但我认为"也许MySQL有我不知道的内置函数";)

问候

如果我正确理解您的问题,您希望所有group_id都具有来自同一city_id的相同值。基本上,你的第一张表是你所拥有的,第二张表是期望的结果。如果是这种情况,您的查询可能如下所示:

UPDATE table1 
INNER JOIN (SELECT * FROM table1 GROUP BY city_id) AS tx
ON table1.city_id = tx.city_id
SET table1.group_id = tx.group_id;

下面是SQL Fiddle,看看它是如何工作的。

如果您想完全删除值并只保留不同的city_id,那么您可以使用以下查询来完成此操作:

DELETE table1 FROM table1 
INNER JOIN (SELECT * FROM table1 GROUP BY city_id) AS tx
ON table1.city_id = tx.city_id
WHERE table1.group_id != tx.group_id;

这里是SQL Fiddle!

在这种情况下,您的结果表将没有id为2的行…

GL!

如果我理解正确,您想删除group_idcity_id相等的行吗?如果是这样的话,很简单:

DELETE FROM units WHERE group_id = city_id

好的,我的解决方案:

UPDATE `ingame_units` INNER JOIN `ingame_groups` g1 ON `ingame_units`.`group_id`=g1.`id` LEFT JOIN `ingame_groups` g2 ON `ingame_units`.`group_id`<>g2.`id` AND g1.`city_id`=g2.`city_id` AND g1.`id`>g2.`id` AND g1.`game_id`=g2.`game_id` SET `ingame_units`.`group_id`=IFNULL(g2.`id`,g1.`id`)

感谢一个人减去我的帖子,不要试图帮助我。问候:)