ORA-01799 - 需要更正查询

时间:2016-06-15 16:07:19

标签: sql oracle

不确定如何重写以下查询。我正在尝试将table_a连接到最新的table_b记录。目前仅测试一个ID,但可以添加table_a上的不同标准:

Select t.*
from table_a t
left join table_b d on d.id = T.id and d.MOD_DATE IN (SELECT MAX(mod_date) FROM table_b d2 WHERE  d2.id = t.id)
where T.id = 123456

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我认为你正在寻找类似的东西:

SELECT      t.*
FROM        table_a t
LEFT JOIN   (
                SELECT      d.*
                FROM        table_b d 
                INNER JOIN  (
                                SELECT  id
                                ,       MAX(mod_date) mod_date_max
                                FROM    table_b d2 
                                GROUP BY id
                            ) db
                        ON  db.id = d.id
                        AND db.mod_date_max = d.mod_date
            ) d
        ON  d.id = T.id 
WHERE       T.id = 123456

请注意,您的where子句会将left join变为inner join

此外,如果您收到错误,请同时发布错误消息,而不仅仅是错误消息。

答案 1 :(得分:0)

我还发现使用以下查询可以实现相同的目的:

SELECT * FROM table_a t 
WHERE id IN (
                 SELECT id 
                   FROM (
                           SELECT id,MAX(MOD_DATE) 
                             FROM table_b  
                            WHERE id = 123456
                         GROUP BY id    
                        )
            )