我有一个类别表,其中有一些重复的类别,如下所述,
`Categories`
+========+============+============+
| cat_id | cat_name | item_count |
+========+============+============+
| 1 | Category 1 | 2 |
| 2 | Category 1 | 1 |
| 3 | Category 2 | 2 |
| 4 | Category 3 | 1 |
| 5 | Category 3 | 1 |
+--------+------------+------------+
这是与另一个 Items 表相关的另一个联结表。第一个表中的 item_count
是每个 cat_id
的项目总数。
`Junction`
+========+=========+
| cat_id | item_id |
+========+=========+
| 1 | 100 |
| 1 | 101 |
| 2 | 102 |
| 3 | 103 |
| 3 | 104 |
| 4 | 105 |
| 5 | 106 |
+--------+---------+
如何将重复类别中的这些项目添加或组合到每个重复项中具有最大 item_count
的项目中? (例如 类别 1
)。
此外,如果 item_count
与那些重复的相同,那么将选择具有最大 cat_id
的类别,并且 item_count
将是合并到那个记录。 (例如 类别 3
)。
Note: Instead of removing the duplicate records, the
item_count
will be set to0
.
下面是预期的结果。
+========+============+============+
| cat_id | cat_name | item_count |
+========+============+============+
| 1 | Category 1 | 3 |
| 2 | Category 1 | 0 |
| 3 | Category 2 | 2 |
| 4 | Category 3 | 0 |
| 5 | Category 3 | 2 |
+--------+------------+------------+
+========+=========+
| cat_id | item_id |
+========+=========+
| 1 | 100 |
| 1 | 101 |
| 1 | 102 |
| 3 | 103 |
| 3 | 104 |
| 5 | 105 |
| 5 | 106 |
+--------+---------+
在结果中,有两个重复项 Category 1
和 Category 3
。我们有 2 个场景,
cat_id
=2
被淘汰是因为它的item_count
=1
小于cat_id
=1
即item_count
=2
。cat_id
=4
被淘汰了,即使它的item_count
是一样的 作为cat_id
=5
因为5
是重复项中的最大值类别 3
。
如果有任何查询可以连接和更新两个表以解决重复问题,请帮助我。
最佳答案
这是一个选择。你可以想办法让它适应更新;-)
为了简单起见,我忽略了连接表
SELECT z.cat_id
, z.cat_name
, (z.cat_id = x.cat_id) * new_count item_count
FROM categories x
LEFT
JOIN categories y
ON y.cat_name = x.cat_name
AND (y.item_count > x.item_count OR (y.item_count = x.item_count AND y.cat_id > x.cat_id))
LEFT
JOIN
( SELECT a.cat_id, b.*
FROM categories a
JOIN
( SELECT cat_name, SUM(item_count) new_count, MAX(item_count) max_count FROM categories GROUP BY cat_name) b
ON b.cat_name = a.cat_name
) z
ON z.cat_name = x.cat_name
WHERE y.cat_id IS NULL;
+--------+------------+------------+
| cat_id | cat_name | item_count |
+--------+------------+------------+
| 1 | Category 1 | 3 |
| 2 | Category 1 | 0 |
| 3 | Category 2 | 2 |
| 4 | Category 3 | 0 |
| 5 | Category 3 | 2 |
+--------+------------+------------+
关于MySQL更新连接查询解决重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33896553/