sql - UNION ALL 未按预期执行 - Oracle SQL
问题描述
我有两张桌子:
表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
但这只会导致一列 vals,这是我不想要的。
如何合并这些表并创建两列,每个表一个,如果该部分未出现在另一个表中,其值只能为 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
请注意,像在小提琴中那样使用区分大小写的标识符通常是不受欢迎的。它往往会使编写查询变得比它需要的更复杂,并且不得不在每个列名周围包含双引号往往会变得很烦人。
推荐阅读
- r - 在有向图中设置方向
- javascript - 异步等待顶部的 javascript
- python - Python初学者试图在Windows 10笔记本电脑上安装matplotlib
- spring-boot - 记录 Spring web-flux HttpWebHandlerAdapter 标头
- android - Android 模拟器无法加载
- java - 单击按钮时显示列表视图项目
- pivot - Pine Script - 如何计算最后 5 个枢轴的平均值?
- angular - 无法连接 Angular 8 应用调用自定义 Web api 授权端点从 Azure AD 进行身份验证
- json - 如何更改 Ruby 的哈希返回格式
- javascript - 'app-element' 不是已知元素