列可能不是外部连接到子查询

时间:2016-02-22 18:35:35

标签: mysql oracle

当我使用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

  )

感谢

1 个答案:

答案 0 :(得分:1)

你究竟是什么问题?

您无法在Oracle中的外部联接的连接条件中指定子查询。这样做会导致ORA-1799错误。

尽管如此,几乎总是可以重写这样的查询。例如,您可以:

LATERAL

...想法是在内联视图中为每个可能的值获取子查询的值,然后将其外部连接到该视图。

在Oracle 12c中,您可以使用daybreak.contract_details.acd_id内联视图来更快地执行该方法的变体。

另一种方法是外部联接到max()的所有值,而不只是contract_details值,然后过滤掉不是的任何值最大值,稍后在查询中(请记住,某些值可能为空(即,如果git tag -d 12345 git push origin :refs/tags/12345 中根本没有匹配)。