问题描述
我创建了两个简单的查询,以使用UNION合并记录
但是,在一种情况下,我遇到了一个问题,第一个表中的数据与第二个表中的数据完全一样
然后结果出现在一个记录中,而不是两个记录,因为其他记录我需要在单独的行中显示
例如,我有两个用于银行的表
BankAccount1和BankAccount2
select ID,REF,Amount
from
(select ID1,REF1,Amount1 from BankAccount1
Union
ID2,REF2,Amount2 from BankAccount2)
结果应为:
ID REF Amount
------------------------
1 10101040 200
1 10101040 200
但是Oracle显示出这样的结果
ID REF Amount
-------------------------
1 10101040 200
您建议如何解决此问题?
解决方法
摘自The UNION [ALL],INTERSECT,MINUS Operators文档:
UNION
操作符仅返回出现在任一结果中的不同行,而UNION ALL
操作符返回所有行。UNION ALL
运算符不会消除重复的选定行
因此,您需要使用UNION ALL
而不是UNION
:
SELECT ID1 AS id,REF1 AS ref,Amount1 AS amount
FROM BankAccount1
UNION ALL
SELECT ID2,REF2,Amount2
FROM BankAccount2
因此,对于您的示例数据:
CREATE TABLE bankaccount1 ( id1,ref1,amount1 ) AS
SELECT 1,10101040,200 FROM DUAL;
CREATE TABLE bankaccount2 ( id2,ref2,amount2 ) AS
SELECT 1,200 FROM DUAL;
这将输出:
ID | REF | AMOUNT -: | -------: | -----: 1 | 10101040 | 200 1 | 10101040 | 200
db 提琴here
(注意:您的查询在语法上无效,因为您需要在SELECT
之后加上UNION
,并且列名将从{{ 1}}和外部SELECT
会期望使用列UNION
,SELECT
,ID1
而不是REF1
,Amount1
,{{1} }。)
使用union all
,因为union
返回不同的行:
select ID1,REF1,Amount1 from BankAccount1
Union all
select ID2,Amount2 from BankAccount2