例如现在有四张表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 关键字统计非重复值,如果不统计非重复的话每一行的三个值会相同,可以自己测试一下。