又来问sql了,合并表
- opensesametable1 有id,姓名,语文成绩
table2
有id,姓名,数学成绩
两个表的姓名有部分重叠
要合并成table3
姓名,语文成绩,数学成绩,请问怎么写呢
姓名不要再重复,可能有的行只有语文成绩,有的只能数学成绩,有的都有
好像用join搞不定 - eisteinfull join?
不同的 SQL JOIN除了我们在上面的例子中使用的 INNER JOIN(内连接),我们还可以使用其他几种连接。
下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。
- JOIN: 如果表中有至少一个匹配,则返回行
- LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
- RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
- FULL JOIN: 只要其中一个表中存在匹配,就返回行
- opensesame试了 返回结果行数都是两个表之和 好像还需要怎么group一下 ,写不出来
试了union all 也是一样
我的想法是写一句 insert into table3 from 两个表
比如table1是
姓名 语文成绩
张三 100
李四 99
table2是
姓名 数学成绩
李四 100
产生的table3就是
姓名 语文 数学
张三 100
李四 99 100 - cybervsq纵表变横表用 when case
- IAmThrillingselect distinct from (a
union b
) - opensesamedistinct试了下是对一张表去重
后面的union用不起来 - linzhzhselect 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 - singlejoe这个应该可以
- 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 - opensesame楼上方法貌似成功,但是数据太大分辨不清结果
谢谢先