当我使用oracle时出现此错误,但在mysql中工作正常
left outer join
daybreak.contract_details expiring on
expiring.acd_id =
(select
max(lastexpire.acd_id)
from
daybreak.contract_details lastexpire
where lastexpire.acd_aad_id =acc_aad_id and
lastexpire.acd_itemization_tcd_code in ('IIN_5') and
lastexpire.acd_expiry_dt between to_date('2014-01-01','yyyy-mm-dd')
and to_date('2014-02-01','yyyy-mm-dd') and
lastexpire.acd_term > 0
)
谢谢
最佳答案
你的问题到底是什么?
Oracle 中的外连接的连接条件中不能指定子查询。这样做会导致 ORA-1799 错误。
不过,几乎总是可以重写这样的查询。例如,您可以:
left outer join ( SELECT acd_aad_id, max(acd_id) max_acd_id FROM daybreak.contract_details lastexpire WHERE
lastexpire.acd_itemization_tcd_code in ('IIN_5') and
lastexpire.acd_expiry_dt between to_date('2014-01-01','yyyy-mm-dd')
and to_date('2014-02-01','yyyy-mm-dd') and
lastexpire.acd_term > 0 ) max_ids ON max_ids.acd_aad_id = aac_aad_id
left outer join
daybreak.contract_details expiring on
expiring.acd_id = max_ids.acd_aad_id
...这个想法是获取内联 View 中每个可能值的子查询的值,然后外连接到该值。
在 Oracle 12c 中,您可以使用 LATERAL
内联 View 来获得该方法的更快执行变体。
另一种方法是仅外部连接到 daybreak.contract_details.acd_id
的所有值,而不仅仅是 max()
值,然后过滤掉任何值稍后在查询中不是最大值的值(请记住,某些值可能为 null(即,如果 contract_details
中没有匹配项)全部)。
关于mysql - 列不能外连接到子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35561237/