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



我创建了两个简单的查询来使用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

你建议如何解决这个问题?

来自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, 10101040, 200 FROM DUAL;

该输出:

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

db<gt;小提琴这里

(注意:您的查询在语法上无效,因为您需要UNION之后的SELECT,列名将取自UNION的第一个SELECT,外部SELECT将需要列ID1REF1Amount1,而不是IDREFAmount。(

使用union all,因为union返回不同的行:

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

相关内容

  • 没有找到相关文章