尽管存在 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
的期望列是 ID1
、REF1
、Amount1
而不是 ID
、REF
、 Amount
.)
我创建了两个简单的查询来使用 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 theUNION ALL
operator returns all rows. TheUNION 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
的期望列是 ID1
、REF1
、Amount1
而不是 ID
、REF
、 Amount
.)