当第三个表中缺少数据时,使用MySQL将数据合并到三个表中
我被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
班级名单:
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.name代码>2<代码>选择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