问题描述
- 数据库SQL,将两张表合并为一张表
-
将表table1、table2合并为表table3
table1:
id name value
1 阅读 5
1 视频 7
1 游戏 7
2 阅读 1
2 游戏 3table2
id name value
1 阅读 8
1 视频 9
1 游戏 2
2 阅读 11
3 视频 4table3:
id name value1 value2
1 阅读 5 8
1 视频 7 9
1 游戏 7 2
2 阅读 1 11
2 游戏 3 0
3 视频 0 4
解决方案
select case when t1.id is null then t2.id else t1.id end id,
case when t1.name is null then t2.name else t1.name end name,nvl(t1.value,0),nvl(t2.value,0) from t1 FULL join t2 on t1.id=t2.id and t1.name=t2.name
解决方案二:
PLSQL下复制表/将一张表插入另一张表中/连接两张表
两张表关联,根据一张表更新另一张表
解决方案三:
select 字段,字段2,isnull(表1.字段3,0),表2.字段3 from (表1 left join 表2 on 表1.字段=表2.字段 and 表1.字段2=表2.字段2)
不知道你能不能看懂,就是用left join连接两张表用0替换null值
解决方案四:
mysql 环境,full join不支持的时候用左右连接来处理,还是楼上的简单。
INSERT INTO table3
SELECT IFNULL(t1.id,t2.id) id,IFNULL(t1.name,t2.name) NAME,IFNULL(t1.value,'0') value1,IFNULL(t2.value,'0') value2
FROM table1 t1 LEFT JOIN table2 t2 ON t1.id = t2.id AND t1.name = t2.name
UNION
SELECT IFNULL(t1.id,t2.id) id,IFNULL(t1.name,t2.name) NAME,IFNULL(t1.value,'0') value1,IFNULL(t2.value,'0') value2
FROM table1 t1 RIGHT JOIN table2 t2 ON t1.id = t2.id AND t1.name = t2.name