又来问sql了,合并表

  • o
    opensesame
    table1 有id,姓名,语文成绩
    table2
    有id,姓名,数学成绩


    两个表的姓名有部分重叠

    要合并成table3
    姓名,语文成绩,数学成绩,请问怎么写呢
    姓名不要再重复,可能有的行只有语文成绩,有的只能数学成绩,有的都有
    好像用join搞不定
  • e
    eistein
    full join?


    不同的 SQL JOIN

    除了我们在上面的例子中使用的 INNER JOIN(内连接),我们还可以使用其他几种连接。

    下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。

    • JOIN: 如果表中有至少一个匹配,则返回行
    • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
    • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
    • FULL JOIN: 只要其中一个表中存在匹配,就返回行
  • o
    opensesame
    试了 返回结果行数都是两个表之和 好像还需要怎么group一下 ,写不出来
    试了union all 也是一样
    我的想法是写一句 insert into table3 from 两个表
    比如table1是
    姓名 语文成绩
    张三 100
    李四 99

    table2是
    姓名 数学成绩
    李四 100

    产生的table3就是
    姓名 语文 数学
    张三 100
    李四 99 100
  • c
    cybervsq
    纵表变横表用 when case
  • I
    IAmThrilling
    select distinct from (a
    union b
  • o
    opensesame
    distinct试了下是对一张表去重
    后面的union用不起来
  • l
    linzhzh
    select c.id,c.姓名,a.语文,b.数学 from (select id,姓名 from a
    union
    select id,姓名 form b) c left join a on a.id=c.id
    left join b on b.id=c.id
  • 疯狂的馒头
    select distinct a.name, a.score, b.score from a left join b on a.name = b.name
    Union
    Select distinct b.name, a.score, b.score from b
    Left join on a.name = b.name where a.name is null
  • s
    singlejoe
    这个应该可以
  • P
    Pyrrhus
    理论上可以用full join,但是结果id会变成2列

    所以先要做一下union,然后用left join就可以了

    select A.id,A.name,M.math,E.english from
    (select id,name from test_math
    union
    select id,name from test_english) A
    left join test_math M
    on A.id=M.id
    left join test_english E
    on A.id=E.id
  • o
    opensesame
    楼上方法貌似成功,但是数据太大分辨不清结果
    谢谢先