Oracle Query 适用于 19c 但不适用于 11g
Oracle Query works for 19c but does not work in 11g
这个查询
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 的方法是什么。
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
语法。
这个查询
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 的方法是什么。
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
语法。