我有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的印象)。会有一个实例,您的学生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
您显然可以抓住任何顺序/字段,但是您可以看到我如何区分上面的部分。
关于mysql - 有关联接多个表的SQL语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58424519/