我有两个表:
表A
| Part | Val | |:----:|:---:| | AA | 3 | | AB | 2 | | AC | 11 | | AD | 6 | | AE | 3 |
表B
| Part | Val | |:----:|:---:| | AC | 9 | | AF | 5 | | AG | 1 | | AH | 10 | | AI | 97 |
我想通过union
这些表来实现此结果:
| Part | ValA | ValB | |:----:|:----:|:----:| | AA | 3 | 0 | | AB | 2 | 0 | | AC | 11 | 9 | | AD | 6 | 0 | | AE | 3 | 0 | | AF | 0 | 5 | | AG | 0 | 1 | | AH | 0 | 10 | | AI | 0 | 97 |
我试过了:
SELECT * FROM tableA UNION ALL SELECT * FROM tableB
但这只会导致一列val,这是我不想要的。
如何合并这些表并创建两列,每列一个,如果零件未出现在另一张表中,则其值可以为0?
SQL FIDDLE供参考。
看来您想加入表格,而不是合并表格
select nvl(a.Part, b.Part) as Part, nvl( a.Val, 0 ) as ValA, nvl( b.Val, 0 ) as ValB from tableA a full outer join tableB b on( a.Part = b.Part ) order by 1
请注意,像在小提琴中一样使用区分大小写的标识符通常是不受欢迎的。它往往使编写查询比需要的更为复杂,并且在每个列名周围都必须包含双引号会变得很烦人。
演示版