基于条件联接mysql表

uttx8gqw  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(285)

我有两个mysql表users和task\u reg
用户

id name
1  user1
2  user2
3  user3
4  user4
5  user5
6  user6
7  user7
8  user8
9  user9

任务注册

top_id  use_id  payment 
1       1       1 
1       2       1
1       4       1
2       3       1
2       5       1

我必须显示所有的用户,也显示他们是否已经支付
这是我的sql命令,但它只显示付费用户

SELECT users.id, users.name, task_reg.payment
FROM task_reg
JOIN users ON users.id = task_reg.use_id
JOIN topics ON topics.id = task_reg.top_id
WHERE topics.id = 1

结果

id  name    payment
1   user1   1
2   user2   1
4   user4   1

预期结果

id  name    payment
1   user1   1
2   user2   1
3   user3   0
4   user4   1
5   user5   0
6   user6   0
7   user7   0
8   user8   0
9   user9   1

小提琴
谢谢。

kyks70gy

kyks70gy1#

因为您需要所有用户,所以它应该是联接顺序中的第一个表。
改变你的想法 Inner joinLeft Join . Where 现场条件 topics.id 应该是联接条件。
使用 Coalesce() 函数将付款的值设置为0(因为找不到匹配的行)。
尝试:

SELECT users.id, users.name, COALESCE(task_reg.payment, 0) AS payment 
FROM users 
LEFT JOIN task_reg ON users.id = task_reg.use_id
LEFT JOIN topics ON topics.id = task_reg.top_id AND topics.id = 1

相关问题