mysql - Sql 语句从两个不同的表中获取信息
问题描述
我有两张桌子,一张叫参与者_tb,另一张叫分配_tb。在参与者_tb上,我的列是参与者 ID、名称、用户名。在allocation_tb 下,我的列是allocation_id、sender_username、receiver_username、done。done列包含以下三个数字中的任何一个:0、1、2。
我使用这个 sql 语句来获取我的值
SELECT *, COUNT(done) d
FROM participants_tb
JOIN allocation_tb ON (username=receiver_username)
WHERE done = 0 || done = 1
GROUP BY receiver_username
它工作得很好,我遇到的问题是,我希望它还包括在参与者_tb 中但不在分配_tb 中的参与者的信息。我尝试使用左外连接,但它没有按预期工作,因为我希望它包含仅在参与者 tb 中但不在分配 tb 中的参与者,因为 where 子句中的完成在分配 tb 中,它不会包括那些信息。
解决方案
你似乎想要:
SELECT p.*, COUNT(a.done) as d
FROM participants_tb p LEFT JOIN
allocation_tb a
ON p.username = a.receiver_username) AND
a.done IN (0, 1)
GROUP BY p.participant_id;
笔记:
LEFT JOIN
保留所有参与者。GROUP BY
需要在第一张桌子上。- 您可以使用
SELECT p.*
--GROUP BY
假设GROUP BY
键是唯一的(或主键)。 - 所有列都应该是合格的。
IN
是一种更简单的方式来表达你的逻辑。
推荐阅读
- python - 如何从函数返回值下方删除“无”?
- html - 响应能力完全被破坏+整个身体的边缘无法识别?
- intellij-idea - Intellij HTML 编辑器:如何转义括号 < 和 >?
- java - spring boot 中的 logback.xml 不打印调试消息
- python - 如何在 Jinja2 自定义过滤器中使用 Python 生成器
- mocha.js - chai-http 响应始终未定义
- python - 将大型python数据保存到数据库中的最少内存消耗方式
- php - 如何在 json 对象数组中添加默认值?
- python - 用 Python 写一个文件
- php - Codeigniter 'CSRF & AJAX' REPOERROR 403 中的调用模式