数据库
首页 > 数据库> > mysql-在1个表上左联接2个表

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