mysql - 列不能外连接到子查询

标签 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

  )

谢谢

最佳答案

你的问题到底是什么?

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/

相关文章:

mysql - Case WHEN 错误

xml - Temenos T24 如何存储数据

mysql - 仅在 mysql 上获取选定数据的表大小(以兆字节为单位)

javascript - NodeJs + Mysql 链式多查询

java - 通过 JMS 使用 Oracle 高级队列 : NPE thrown at AQjmsProducer. jdbcEnqueue

sql - 如何将隐式连接重写为显式连接?

string - 如何在Oracle中检索A,B格式的两列数据

oracle - [Oracle][ODBC][Ora]ORA-12170 : TNS:Connect timeout occurred ERROR [IM006] [Microsoft][ODBC Driver Manager] Driver's SQLSetConnectAttr failed

MySQL LEFT JOIN a ON b 与包含 WHERE a IN (b) 相比

mysql - 使用三个表的嵌套 SQL 查询