当第三个表中缺少数据时,使用MySQL将数据合并到三个表中

当第三个表中缺少数据时,使用MySQL将数据合并到三个表中,mysql,Mysql,我被mySQL中的一个场景困住了: 我有三张桌子, 班级名单: roll_no | name 123 | jack 456 | jill 789 | miriam StudMarks: name | Subject | marks jack | math | 15 jill | science | 12 课外活动: name | activity jill | singing miriam| dancing 我需要一个查询结果:StudentSummar

我被mySQL中的一个场景困住了: 我有三张桌子,
班级名单:

roll_no | name
123     | jack
456     | jill
789     | miriam
StudMarks:

name | Subject | marks
jack | math    | 15 
jill | science | 12
课外活动:

name  | activity
jill  | singing
miriam| dancing
我需要一个查询结果:StudentSummary as

name  | subject | marks | activity
jack  | math    | 15    | NA
jill  | science | 12    | singing
miriam| NA      | NA    | dancing

我尝试了使用联接的不同方法,但无法获得期望的结果

使用左连接(或右连接,取决于顺序):


这将为您提供预期的结果:

select t1.name,t1.subject, case when t1.makrs is null then "NA" else t1.marks end as marks, t2.activity from StudMarks t1 left join ExtraCurricularActivity t2 on  t1.name=t2.name

向我们展示您尝试的内容-(提示:您需要一个外部联接)我将开始检查您的模式。在表之间使用名称作为唯一标识符是不好的practise@Strawberry以下是我尝试过的:@草莓:1<代码>从类中选择cr.name、sm.marks、sm.subject、eca.activity roll cr LEFT JOIN StudMarks sm ON sm.name=cr.name,课外活动eca其中eca.name=cr.name2<代码>选择cr.name,(当sm.name=cr.name然后sm.marks ELSE'NA'结束时为大小写)marks,(当sm.name=cr.name然后sm.subject ELSE'NA'结束时为大小写)subject,(当eca.name=cr.name然后eca.activity ELSE'NA'结束时为大小写)ClassRoll cr中的活动,StudMarks sm,课外活动eca,其中cr.name=sm.name和cr.name=eca.name@SEBBINFIELD你说得对。但是,由于我没有对数据库的写访问权限,我正试图找到一个符合当前场景的解决方案。谢谢。这很有效。我从未想过在第三个表上应用左连接,而是尝试使用WHERE子句。(更糟的是)不客气,花点时间研究连接,它是sql中的基本概念之一。
select t1.name,t1.subject, case when t1.makrs is null then "NA" else t1.marks end as marks, t2.activity from StudMarks t1 left join ExtraCurricularActivity t2 on  t1.name=t2.name
SELECT c.name, s.subject, s.marks, e.activity FROM ClassRoll c LEFT JOIN StudMarks s ON c.name = s.name LEFT JOIN ExtraCurricularActivity e ON c.name = e.name