我的数据库架构如下所示:
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
答案 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 |
+---------+------------+