mysql - 加入查询也返回空

标签 mysql sql

我有三个表(更多列但列出了重要的):

users
user_id - name
1         DAN
2         TED
3         SAM

list_shares
list_shares_id - user_id - list_id
1                1         123
2                3         123
3                2         456

list_contribute
list_contr_id - list_id - can_contribute
1               123       3

我想显示 list_id 下表 list_shares 中的所有用户,将其与 users 表连接以获取用户信息,并计算其中有多少人也在 contribution 表中

基本上 - 用户可以与其他用户共享列表,也可以邀请一些用户做出贡献,但并非所有共享的用户都可以贡献,因此需要单独的 list_contribute 表。

这是我首先使用的,它只显示具有特定 ID 的所有用户:

select u.name, u.live_prof_pic, u.url, u.user_id from list_shares ls 
join users u on ls.user_id = u.user_id
where ls.list_id = '123'

这带来了两个结果,这是正确的——下一个查询试图找出这两个中的哪一个也在 list_contribute 表中——但是,它将结果减少为一个,而我希望它返回两个并显示 0 how_many 如果不在 list_contribute 中

select u.name, u.live_prof_pic, u.url, count(ls.list_shares_id) as how_many, u.user_id from list_shares ls
join users u on ls.user_id = u.user_id
left join list_contribute lc on ls.list_id = lc.list_id
where ls.list_id = '123'

在上面的数据中我要返回

user_id    name    how_many    
3          SAM     1
1          DAN     0

最佳答案

添加一个 GROUP BY 使其成为标准的 SQL 聚合

select u.name, u.live_prof_pic, u.url, count(ls.list_shares_id) as how_many, u.user_id
from 
list_shares ls
join users u on ls.user_id = u.user_id
left join list_contribute lc on ls.event_id = lc.event_id
where ls.list_id = '123'
group by u.name, u.live_prof_pic, u.url, u.user_id

MySQL 有一个 rubbish试图删除要求但经常提供不正确数据的扩展

评论后编辑。

您仍然应该使用正确的 GROUP BY 语法

但是,您的 COUNT 应该是 COUNT(lc.event_id) 以计算子行。

关于mysql - 加入查询也返回空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13087836/

相关文章:

mysql - UPDATE 语句在 "query end state"

mysql - SQL:其中 Field OR Field2 LIKE %entry%

mysql - 在 Django ORM 中按相关模型字段过滤模型

mysql - SQL if 语句

mysql - 删除所有值比第二高值低 5 倍的记录

mysql - 状态缩写检查约束

php - 使用php从mysql数据库中的数组中提取特定数据

mysql - 从另一个表中的最大日期更新日期字段

SQL Count 不同的时间,相差 30 分钟

php - SQL - 插入数据,其中值是数组