用三个表计数组

时间:2015-02-15 23:43:31

标签: mysql sql

我的数据库架构如下所示:

User table

Shop table (foreign_key to User)

Item-Shop join table (foreign key to Item, foreign key to Shop)

Item table

因此,用户通过商店拥有许多商品。

我试图找出每个用户拥有的物品数量,知道用户可以拥有多个商店,每个商店可以有多个商品。

我需要为此做什么SQL查询?所以,最后我会期待类似的东西:

User ID       Item count
 1                30
 2                50
 3                70

1 个答案:

答案 0 :(得分:0)

如果您想获得与用户相关的项目数量,您必须加入不同的表并使用GROUP BY子句:

SELECT u.user_id, COUNT(i.item_id) item_count FROM user u
INNER JOIN shop s ON s.user_id = u.user_id
INNER JOIN item_shop vis ON vis.shop_id = s.shop_id
INNER JOIN item i ON i.item_id = vis.item_id
GROUP BY u.user_id

如果您还想退回尚未拥有任何商品的用户(item_count将为0),则需要使用LEFT JOIN代替。

如果我们有以下样本数据:

+---------+ +---------+---------+ +---------+---------+ +---------+
| user_id | | shop_id | user_id | | item_id | shop_id | | item_id |
+---------+ +---------+---------+ +---------+---------+ +---------+
|       1 | |       1 |       1 | |       1 |       1 | |       1 |
|       2 | |       2 |       2 | |       2 |       2 | |       2 |
|       4 | |       2 |       1 | |       3 |       2 | |       3 |
+---------+ +---------+---------+ |       4 |       1 | |       4 |
                                  |       5 |       1 | |       5 |
                                  +---------+---------+ +---------+

您将获得以下结果:

+---------+------------+
| user_id | item_count |
+---------+------------+
|       1 |          5 |
|       2 |          2 |
+---------+------------+