orcalesql问题

图片.png

有三个表,张三数学考试缺考,所以数学得分为0,三张表怎么把张三关联起来?得出下表呢?图片.png

最主要的还是怎么数学表中把不存在的张三关联起来?

用户kWEye3931 发布于 2021-4-24 11:26 (编辑于 2021-4-24 11:27)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共8回答
最佳回答
0
jongwangLv6中级互助
发布于2021-5-26 09:36(编辑于 2021-5-26 09:37)

把三个表union all 起来,然后取结果中的姓名和科目做笛卡尔积,然后再关联取分数

image.png

最佳回答
0
廿三Lv6中级互助
发布于2021-4-24 12:00

大致就是这个思路,你看一下,就是先把所有的考试人员查询出来,再左连接成绩表。但是显示出来,是一个人员一行数据,要弄成3行数据的话,你再百度一下,有行转列的函数。

select table.姓名, table(语文).科目, nvl(table(语文).成绩 ,0) 成绩

from table 

left join table(语文) on table.姓名 = table(语文).姓名 

...

最佳回答
0
小县城Lv4见习互助
发布于2021-4-25 16:39

把三个表union 到一起,然后作为试图进行查询张三的资料

select * from (

select * from table1

union 

select * from table2

union

select * from talbe3

) where 姓名='张三'

最佳回答
0
shirokoLv6资深互助
发布于2021-4-25 16:47

你需要另一个表4,所有科目列表。。

当然你可以用所有人考过的客户集合,不过如果有一项是所有人缺考,你就不可能关联出来。

最佳回答
0
AntidoteLv4见习互助
发布于2021-5-21 18:04

With a as(

Select * from table1

Union all

Select * from table2

Union all

Select * from table3)

           b as(

Select 姓名,decode(科目,'语文',分数,0),

decode(科目,'数学',分数,0),

decode(科目,'英语',分数,0)from a )

Select  * from b where 姓名 ='张三'

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

你在decode 复用一下,或者用case 转换一下

最佳回答
0
liu.yangLv2初级互助
发布于2021-5-26 09:18

with tmp as (select 姓名,科目,分数 from table1union allselect 姓名,科目,分数 from table2union all select 姓名,科目,分数 from table3),tmp1 as (--这个科目可以做个配置表select distinct 科目 from table1unionselect distinct 科目 from table2unionselect distinct 科目 from table3),tmp2 as (--这个姓名应该有现成得 学生表把select distinct 姓名 from table1unionselect distinct 姓名 from table3unionselect distinct 姓名 from table3)SELECT t1.姓名, t.科目, coalesce(t2.分数,0) as 分数from tmp1 tleft join tmp2 t1on 1=1left join tmp t2on t.科目=t2.科目 and t1.姓名=t2.姓名

最佳回答
0
Z4u3z1Lv6专家互助
发布于2021-5-26 09:36

with t as(

    SELECT DISTINCT A.姓名  FROM (

        SELECT 姓名 FROM TABLE1

        UNION ALL

        SELECT 姓名 FROM TABLE2

        UNION ALL

        SELECT 姓名 FROM TABLE2

    ) A

)

SELECT T.姓名,'语文' [科目],TABLE1.分数 FROM T LEFT JOIN TABLE1 ON T.姓名=TABLE1.姓名

UNION ALL

SELECT T.姓名,'数学' [科目],TABLE2.分数 FROM T LEFT JOIN TABLE2 ON T.姓名=TABLE2.姓名

UNION ALL

SELECT T.姓名,'英语' [科目],TABLE3.分数 FROM T LEFT JOIN TABLE3 ON T.姓名=TABLE3.姓名

最佳回答
0
煮酒话青梅Lv3见习互助
发布于2021-5-26 10:01

select  kmxm.姓名,kmxm.科目, nvl(cj.分数, 0) 分数

  from (select 科目,姓名

  from (select distinct 科目

          from (select *

                  from table1

                union

                select *

                  from table2

                union

                select *

                  from table3)) 

  full outer join (select distinct 姓名

                     from (select *

                             from table1

                           union

                           select *

                             from table2

                           union

                           select *

                             from table3)) 

on 1=1  )kmxm                        

  left join (select *

               from table1

             union

             select *

               from table2

             union

             select *

               from table3) cj

    on cj.科目 = kmxm.科目 and  cj.姓名=kmxm.姓名 where kmxm.姓名='张三'

  • 8关注人数
  • 713浏览人数
  • 最后回答于:2021-5-26 10:01
    请选择关闭问题的原因
    确定 取消
    返回顶部