我有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/

10-12 05:37
查看更多