mysql - 关于连接多个表的 SQL 语法
问题描述
我有 3 个这样的表:
表名:学生
id * | name
-----+------
1 | Alice
表名:教师
id * | name
-----+------
2 | Bob
表名:消息
msg_id * | from | message
---------+------+----------------------------
100 | 1 | Hi, my name is Alice. I'm student.
101 | 2 | Hi, my name is Bob. I'm teacher.
102 } 1 | Another message from Alice.
- = 主键。
你能帮我做一个 SQL 查询,结果如下:
msg_id | name | message
-------+-------+-----------------------------------
100 | Alice | Hi, my name is Alice. I'm student.
101 | Bob | Hi, my name is Bob. I'm teacher.
102 | Alice | Another message from Alice.
解决方案
在不更改表结构的情况下,还有许多替代方法,例如使用带有标识个人类型的标志的人员表。但是回到你原来的和未修改的结构。“来自”显示您分别控制学生或教师表中的下一个“ID”。因为学生是 1,所以老师是 2(因此您正在控制 ID 的 IMPRESSION)。是否会有学生 ID = 1 和教师 ID = 1 的情况?
如果不是,那么您可以对每个表使用双左连接并拉取不为空的那个
select
m.id,
coalesce( s.name, t.name ) as Person,
case when s.id is null then 'teacher' else 'student' end WhoAmI,
m.message
from
Messages m
left join Students s
on m.from = s.id
left join Teachers t
on m.from = t.id
您显然可以获取任何订单/字段,但您可以看到我如何区分上面的部分。
推荐阅读
- arrays - 通过字符串值访问数组
- r - 使用贝叶斯预测 R
- blazor - asp.net core mvc blazor 自动刷新列表
- azure - 直接从 azure blob 存储提供私有文件
- c++ - 从保存在 .txt 文件中的数组加载 3D 立方体
- java - 更新参考实体后有什么方法可以更新其他实体中的列?
- java - 如何根据条件调用不同的 POJO 实例
- python - 为什么不能在 python 3 中构建异或链表?
- php - 您如何计算 XML 文件中的两个节点在一个元素中出现的次数?
- javascript - setState 在 mouseMove 事件上更新样式时导致重新渲染