例如现在有四张表user,table1,table2,table3
我要统计出user表中的每一项在另外三个表中分别的数据量

user表

idnametel
1张三123
2李四456
3王五789

table1

iduiddata
11xxx
21xxx
32xxx
43xxx

table2

iduiddata
13xxx
23xxx
32xxx
43xxx

table3

iduiddata
12xxx
23xxx
32xxx
43xxx

预期查询结果:

nametable1table2table3
张三200
李四112
王五132

直接上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:先 usertable1 进行连接,生成一张中间表,然后这张中间表再和table2进行连接,以此类推。
最后加一个GROUP BY来通过用户分组。
然后count的时候要添加 DISTINCT 关键字统计非重复值,如果不统计非重复的话每一行的三个值会相同,可以自己测试一下。

最后修改:2021 年 04 月 27 日
如果觉得我的文章对你有用,请随意赞赏