例如现在有四张表user,table1,table2,table3
我要统计出user表中的每一项在另外三个表中分别的数据量
user表
id | name | tel |
---|---|---|
1 | 张三 | 123 |
2 | 李四 | 456 |
3 | 王五 | 789 |
table1
id | uid | data |
---|---|---|
1 | 1 | xxx |
2 | 1 | xxx |
3 | 2 | xxx |
4 | 3 | xxx |
table2
id | uid | data |
---|---|---|
1 | 3 | xxx |
2 | 3 | xxx |
3 | 2 | xxx |
4 | 3 | xxx |
table3
id | uid | data |
---|---|---|
1 | 2 | xxx |
2 | 3 | xxx |
3 | 2 | xxx |
4 | 3 | xxx |
预期查询结果:
name | table1 | table2 | table3 |
---|---|---|---|
张三 | 2 | 0 | 0 |
李四 | 1 | 1 | 2 |
王五 | 1 | 3 | 2 |
直接上SQL语句
SELECT user.name, COUNT(DISTINCT table1.id) table1, COUNT(DISTINCT table2.id) table2, COUNT(DISTINCT table3.id) table3
FROM user
LEFT JOIN table1 ON table1.uid=user.id
LEFT JOIN table2 ON table2.uid=user.id
LEFT JOIN table3 ON table3.uid=user.id
GROUP BY user.id
多个 LEFT JOIN
:先 user
和 table1
进行连接,生成一张中间表,然后这张中间表再和table2
进行连接,以此类推。
最后加一个GROUP BY
来通过用户分组。
然后count的时候要添加 DISTINCT
关键字统计非重复值,如果不统计非重复的话每一行的三个值会相同,可以自己测试一下。