我有两个表用相同的结构填充到2个不同的表中:MST3_CURR和MST4_CURR。帐户被填充到两个表中的一个;每个表都包含处于不同“状态”的帐户。为了生成完整的帐户列表,需要将表格完全连接起来,并为帐户提取最新数据。
还有其他几个表遵循完全相同的方法,我正在使用UNION ALL
运算符而没有问题。但是,由于某些原因,当我执行UNION ALL
这两个表时,我收到 4700121500023998 的记录,该记录位于 MST3_CURR 中,但其他帐户是在 MST4_CURR 中,并且不存在于最终数据集中。当我撤消UNION ALL
订单并首先 MST4_CURR 后跟 MST3_CURR 时,反之亦然。
WITH cchm_d_curr AS (
SELECT * FROM hcus_raw.cchm_d_mst3_curr
UNION ALL
SELECT * FROM hcus_raw.cchm_d_mst4_curr
)
SELECT chd_current_balance FROM cchm_d_curr
WHERE
chd_account_number IN (4700121500023998, 4700121500090430, 4700121500044101, 4700121500250492, 4700121500250013)
;
我无法找到Oracle 12c所展示的这种特殊行为的任何答案。如果缺少有助于回答我问题的信息,请告诉我。
谢谢。
答案 0 :(得分:0)
以下内容返回[m3 first,m4 first] ??
{
WITH cchm_d_curr AS (
SELECT 'm3' src, m3.* FROM hcus_raw.cchm_d_mst3_curr m3
UNION ALL
SELECT 'm4' src, m4.* FROM hcus_raw.cchm_d_mst4_curr m4
)
SELECT src, chd_account_number, chd_current_balance FROM cchm_d_curr
WHERE
chd_account_number IN (4700121500023998, 4700121500090430, 4700121500044101, 4700121500250492, 4700121500250013)
;
}
答案 1 :(得分:0)
可能是查询表中的列顺序不同,因此,联合中的反转表会导致不同的列被“ where”过滤,即
select a, b
from (select A, b from t1
union all
select b, A from t2)
where a=1
返回与该查询预期不同的内容
select a, b
from (select A, b from t1
union all
select A, b from t2)
where a=1
我将检查原始问题中表hcus_raw.cchm_d_mst3_curr和hcus_raw.cchm_d_mst4_curr中的列顺序是否相同。