我创建了两个简单的查询来使用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
将需要列ID1
、REF1
、Amount1
,而不是ID
、REF
、Amount
。(
使用union all
,因为union
返回不同的行:
select ID1, REF1, Amount1 from BankAccount1
Union all
select ID2, REF2, Amount2 from BankAccount2