sql - Oracle嵌套相关子查询问题

标签 sql oracle

考虑具有一对多关系的表1和表2(表1是主表,表2是明细表)。我想从table1获取记录,其中一些值('XXX')是与table1相关的详细记录的table2中最近记录的值。我想做的是这样的:

select t1.pk_id
  from table1 t1
 where 'XXX' = (select a_col
                  from (  select a_col
                            from table2 t2
                           where t2.fk_id = t1.pk_id
                        order by t2.date_col desc)
                 where rownum = 1)

但是,由于在相关子查询中对table1(t1)的引用是两层深的,因此会弹出一个Oracle错误(无效的id t1)。我需要能够重写它,但是一个警告是只能更改where子句(即,初始select和from必须保持不变)。能做到吗

最佳答案

这是另一种分析方法:

select t1.pk_id
  from table1 t1
 where 'XXX' = (select distinct first_value(t2.a_col)
                                  over (order by t2.date_col desc)
                  from table2 t2
                  where t2.fk_id = t1.pk_id)

这是使用排名函数的相同想法:
select t1.pk_id
  from table1 t1
 where 'XXX' = (select max(t2.a_col) keep
                          (dense_rank first order by t2.date_col desc)
                  from table2 t2
                  where t2.fk_id = t1.pk_id)

关于sql - Oracle嵌套相关子查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5314321/

相关文章:

SQL Server 时区

sql - 如何确定给定标准的连续范围的大小?

mysql - 如何编写日期值适合一个范围内和另一个范围外的连接查询

java - 无法解析 oracle.jdbc.OracleDriver

sql - 如何检索具有另一个公共(public)字段的行(字段中具有最大值)?

sql - CASE 与大型数据集的多个 UPDATE 查询 - 性能

sql - 增加变量的 PL/SQL 更新

sql - 将不同表与同一列无歧义地组合

sql - Teradata 中的 QUALIFY ROW_NUMBER

c - 构建过程后如何在 cmake 中编译其他源文件