【发布时间】:2016-11-01 20:46:38
【问题描述】:
下面是java中的查询
SELECT achieve_STATUS_CD
FROM achievemnt
WHERE env_id = '?' AND ROWNUM = 1
ORDER BY achive_status_dt
需要根据另外两个表注册返回值'Y',提供以下条件
- enrollment.achieve_intent = '2'
- 注册.BEGIN_DT >= 迄今为止 ( 2011 年 5 月 1 日, 'MM/DD/YYYY') 3.provision.RELEASE_DT
对于其余所有条件,它应该返回原始查询中的值(SELECT perform_STATUS_CD FROM achievementmnt WHERE env_id = '?' AND ROWNUM = 1 ORDER BY achive_status_dt)
achievemnt 是注册的子表
这个逻辑怎么写?
我已经编写了下面的查询,但它在 2 个地方有 env_id,但我们现在无法在我们的 java 中更改它,所以我需要编写一个仅一次接受 env_id 的查询
WITH TMP
AS (SELECT 'Y' AS achieve_STATUS_CD, env_id
FROM enrollment r, provision a
WHERE r.prov_id = a.prov_id
AND r.achieve_intent = '2'
AND a.BEGIN_DT >=
TO_DATE (
05/01/2011,
'MM/DD/YYYY')
AND a.RELEASE_DT <= SYSDATE AND R.env_ID = '?')
SELECT NVL (F.achieve_STATUS_CD,TMP.achieve_STATUS_CD)
FROM TMP FULL OUTER JOIN
(SELECT achieve_STATUS_CD
FROM achievemnt
WHERE env_id = '?' AND
ROWNUM = 1
ORDER BY achive_status_dt
) F
ON TMP.env_ID = F.env_ID;
【问题讨论】:
-
首先,我怀疑您的初始查询不正确。
rownum = 1谓词将在order by之前应用,因此您可以选择首先遇到的任意行并对该行进行排序。您似乎可能想要第一个achive_status_dt行中的值。我不确定我是否理解你的其余问题。如果您只希望使用单个绑定变量的最后一个查询的逻辑,只需创建另一个 CTE,从 dual 中选择绑定值并在其余查询中尽可能多次引用该 CTE。 -
你能告诉我如何使用 CTE 从 dual 中选择绑定值,我可以参考
-
这是在 Oracle 中