UNION ALL 未按预期执行 - Oracle SQL
UNION ALL not performing as expected - Oracle SQL
我有两个 table:
tableA
| Part | Val |
|:----:|:---:|
| AA | 3 |
| AB | 2 |
| AC | 11 |
| AD | 6 |
| AE | 3 |
tableB
| Part | Val |
|:----:|:---:|
| AC | 9 |
| AF | 5 |
| AG | 1 |
| AH | 10 |
| AI | 97 |
我想 union
这些 table 达到这个结果:
| 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,这是我不想要的。
如何合并这些 table 并创建两列,每列对应 table,如果该部分没有出现在另一列 table 中,它的值只能是 0?
SQL FIDDLE供参考。
你可以试试下面的-
select part,max(valA),max(valB) from
(
select part, val as valA, 0 as valB from tableA
union all
select part, 0 , val from tableB
)A group by part
您似乎想要连接表,而不是合并它们
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
请注意,像您在 fiddle 中那样使用区分大小写的标识符通常是不受欢迎的。它往往会使编写查询变得比需要的更复杂,并且必须在每个列名周围包含双引号往往会变得很烦人。
我有两个 table:
tableA
| Part | Val |
|:----:|:---:|
| AA | 3 |
| AB | 2 |
| AC | 11 |
| AD | 6 |
| AE | 3 |
tableB
| Part | Val |
|:----:|:---:|
| AC | 9 |
| AF | 5 |
| AG | 1 |
| AH | 10 |
| AI | 97 |
我想 union
这些 table 达到这个结果:
| 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,这是我不想要的。
如何合并这些 table 并创建两列,每列对应 table,如果该部分没有出现在另一列 table 中,它的值只能是 0?
SQL FIDDLE供参考。
你可以试试下面的-
select part,max(valA),max(valB) from
(
select part, val as valA, 0 as valB from tableA
union all
select part, 0 , val from tableB
)A group by part
您似乎想要连接表,而不是合并它们
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
请注意,像您在 fiddle 中那样使用区分大小写的标识符通常是不受欢迎的。它往往会使编写查询变得比需要的更复杂,并且必须在每个列名周围包含双引号往往会变得很烦人。