我的数据库中有表units
。在模式I中,有字段id
、unit_id
、group_id
、city_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_id
和city_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`)
感谢一个人减去我的帖子,不要试图帮助我。问候:)