【问题标题】:Oracle Query works for 19c but does not work in 11gOracle Query 适用于 19c 但不适用于 11g
【发布时间】:2021-06-24 17:53:41
【问题描述】:

这个查询

SELECT (SELECT CERT_NBR 
        FROM (
          SELECT XREF.CERT_NBR, XREF.REQUEST_ID , XREF.AUDIT_TS 
          FROM B2B_XREF_CERT_QUOTE XREF 
          WHERE XREF.REQUEST_ID = REQ.REQUEST_ID  
          ORDER BY XREF.AUDIT_TS DESC
       ) WHERE rownum = 1) AS CERT_NBR 
FROM B2B_RT_REQUEST REQ, 
     B2B_RT_RESPONSE RES 
WHERE REQ.REQUEST_ID = RES.REQUEST_ID 
AND UPPER(TRIM(REQ.REQUEST_ID)) IN ('RF27117FE') 

在 19c 上运行良好,但在 11g 上失败,有人可以告诉我写同样适用于 11g 的替代方法是什么。

【问题讨论】:

  • 请提供示例数据、期望的结果以及查询应该做什么的解释。另外,您为什么使用正确、明确、标准、可读的JOIN 语法?
  • 你得到什么错误?
  • @GordonLinoff 这个查询是一个大查询的一部分,它连接了许多其他的表。如果我也加入这个,完整的查询将错过获取行。

标签: sql oracle oracle11g oracle19c


【解决方案1】:

Oracle(和 MySQL)不允许嵌套的相关子查询引用。你可以改用KEEP:

SELECT (SELECT MAX(CERT_NBR) KEEP (DENSE_RANK FIRST ORDER BY XREF.AUDIT_TS DESC)
        FROM B2B_XREF_CERT_QUOTE XREF 
        WHERE XREF.REQUEST_ID = REQ.REQUEST_ID  
       ) AS CERT_NBR 

您还应该学习正确、明确、标准、可读的JOIN 语法。

【讨论】:

    猜你喜欢
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 2021-03-20
    • 2013-06-13
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多