Oracle中的嵌套子查询限制

时间:2016-02-18 20:04:39

标签: oracle

所以,我在各种论坛和资源网站上对此进行了相当多的阅读,但尚未找到我认为适用于我的案例的解决方案。而且,我无法相信这证明是多么困难;我认为这种查询会相当普遍。

基本上我在这里做的是通过union查询两个历史表(tbl_b和tbl_c)的特定里程碑日期 - 可能有多个结果...我希望找到最新的这些结果,使用最大值然后,此日期将作为主查询中的列返回。

我的问题是,在第3层子查询中,我需要从顶部查询(tbl_a)中的表中引用标识符值。

我知道相关查询只能引用他们的父查询 - 所以,我被卡住了。

修改1 我搜索的目标日期很可能(但不一定)在结果集中是唯一的。它是数据记录的时间戳。我正在寻找历史上与tbl_a中每列相关的最新条目。为此创建一个SQL小提琴。

见下面的示例:

select  tbl_a.col_a,
        tbl_a.col_b,
     (
        select  max(target_date)
        from
        (
            select  tbl_b.target_date
            from    tbl_b
            where   tbl_b.tbl_a_id = tbl_a.id and
                    tbl_b.flag = 1 and
                    tbl_b.milestone_id = tbl_a.milestone_id

            union

            select  tbl_c.target_date
            from    tbl_c
            where   tbl_c.tbl_a_id = tbl_a.id and
                    tbl_c.flag = 1 and
                    tbl_c.milestone_id = tbl_a.milestone_id
        ) most_recent_target_date
    )
from tbl_a

1 个答案:

答案 0 :(得分:0)

以这种方式将此查询转换为联接:

select  tbl_a.col_a,
        tbl_a.col_b,
        max(most_recent_target_date.target_date)
from tbl_a
join (
            select  tbl_b.target_date, tbl_b.date_id
            from    tbl_b
            where   tbl_b.flag = 1 

            union all

            select  tbl_c.target_date, tbl_c.date_id
            from    tbl_c
            where   tbl_c.flag = 1 
) most_recent_target_date
ON tbl_a.date_id = most_recent_target_date.date_id
GROUP BY tbl_a.col_a,
         tbl_a.col_b