【发布时间】:2019-01-17 00:35:39
【问题描述】:
我正在尝试执行左连接,其中必须满足多个条件,包括拉入满足这些条件的 MAX 序列号。
左连接位于两个表中的唯一标识符上。表 acaps_history 对于每个 app_id 都有几行。我只需要拉入具有最高 seq_number 和 'XU' 的 activity_code 的一行。如果给定的 app_id 不存在代码“XU”,那么上面的 case 语句应该为该行返回“N”。我目前的代码不起作用 - 返回错误“列可能未外连接到子查询”:
create table orig_play3 as
(select
x.*,
case when xa.activity_code in 'XU' then 'Y' else 'N' end as cpo_flag
from
dfs_tab_orig_play_x x
left join cf.acaps_history xa on
x.APP_ID = xa.FOC_APPL_ID
and xa.activity_code in 'XU'
and xa.seq_number = (select max(seq_number) from cf.acaps_history where FOC_APPL_ID=x.app_id)
)
【问题讨论】:
-
是否只需要检查
xa是否包含每个x.APP_ID的特定活动代码的记录(或检查最后一条记录是否有此活动代码)?如果是这样,我建议使用子查询而不是左连接。 -
我需要检查
xa是否包含每个x.app_id的代码“XU”。如果是,则仅拉入具有最大序列号的记录。当xa中的 app_id 多次列出代码“XU”时,最大序列号是相关的。 -
试试
select x.*, (select decode(count(*), 0, 'N', 'Y') from cf.acaps_history xa where x.app_id = xa.foc_appl_id and xa.activity_code = 'XU') from dfs_tab_orig_play_x x。我看不到你在哪里使用了 xa 中的其他一些数据,所以不需要外连接它...
标签: oracle subquery max left-join outer-join