尽管存在 Union,Oracle 仍将两条记录合并为一条记录

Oracle combines two records in one record despite of Union

我创建了两个简单的查询来使用 UNION

合并记录

但是,我在一个案例中遇到了问题,第一个 table 中的数据与第二个完全一样

然后结果出现在一条记录中,而不是两条记录,因为我需要它们在不同的行中

例如,我有两个 table 用于银行

银行账户 1 和银行账户 2

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

你有什么建议来解决这个问题?

使用 union all 因为 union returns 不同的行:

select ID1, REF1, Amount1 from BankAccount1 
Union all
select ID2, REF2, Amount2 from BankAccount2

来自 The UNION [ALL], INTERSECT, MINUS Operators 文档:

The UNION operator returns only distinct rows that appear in either result, while the UNION ALL operator returns all rows. The UNION ALL operator does not eliminate duplicate selected rows

所以你需要使用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, 10101040, 200 FROM DUAL;

这输出:

ID |      REF | AMOUNT
-: | -------: | -----:
 1 | 10101040 |    200
 1 | 10101040 |    200

db<>fiddle here

(注意:您的查询在语法上无效,因为您需要在 UNION 之后添加 SELECT 并且列名将取自第一个 SELECT UNION 和外部 SELECT 的期望列是 ID1REF1Amount1 而不是 IDREFAmount.)