mysql-在1个表上左联接2个表
作者:互联网
它一定很容易,但是我无法想到任何解决方案,也无法在某个地方找到答案…
我得到了表“用户”
和一个表“ blogs”(user_id,blogpost)
一个表“ messages”(user_id,消息)
我想要以下结果:
User | count(blogs) | count(messages)
Jim | 0 | 3
Tom | 2 | 3
Tim | 0 | 1
Foo | 2 | 0
所以我所做的是:
SELECT u.id, count(b.id), count(m.id) FROM `users` u
LEFT JOIN blogs b ON b.user_id = u.id
LEFT JOIN messages m ON m.user_id = u.id
GROUP BY u.id
显然这是行不通的,因为第二个左联接与博客有关,而与用户无关.有什么建议么?
解决方法:
首先,如果只需要计数值,则可以进行子选择:
select u.id, u.name,
(select count(b.id) from blogs where userid = u.id) as 'blogs',
(select count(m.id) from messages where userid = u.id) as 'messages'
from 'users'
请注意,这只是一个简单的sql示例,我现在没有mysql db可以对其进行测试.
另一方面,您可以进行联接,但是应该使用外部联接来包括没有博客但有消息的用户.这意味着您会多次获得多个用户,因此分组依据将很有帮助.
标签:multiple-tables,left-join,mysql 来源: https://codeday.me/bug/20191102/1988924.html