【发布时间】:2015-11-24 14:43:27
【问题描述】:
我有一个类别表,其中包含一些重复的类别,如下所述,
`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 的项目? (例如Category 1)。
此外,如果item_count 与那些重复的相同,则将选择具有最大cat_id 的类别并将item_count 组合到该记录中。 (例如Category 3)。
注意:
item_count不会删除重复记录,而是 设置为0。
下面是预期的结果。
+========+============+============+
| 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是重复项中的最大值Category 3。
如果有任何查询可以连接和更新两个表以解决重复问题,请帮助我。
【问题讨论】:
-
您想要最小还是最大 cat_id?你写的和表格里的不一样:id=3 cat_id=1
-
@Strawberry
id列与结果集无关,而是用于索引的自动增量主列 -
@genespos
cat_id= 1 在其重复项中具有最大的item_count,因此与重复项cat_id= 2 相关的项目应添加到cat_id= 1。 -
如果绑定了 item_counts 怎么办?
-
@Strawberry 在结果中,我们有两种情况,(1)
cat_id= 2 被淘汰,因为它的item_count= 1 小于cat_id= 1 的@987654359 @ = 2. (2)cat_id= 4 被淘汰,即使它的item_count与cat_id= 5 相同,因为5 是重复的Category 3中的最大值。
标签: mysql foreign-keys relational-database junction-table