我需要從派生表中的外部查詢引用一個字段。問題是我需要使用外部表中的值(本例中爲A)限制從派生表中獲取的最大日期,因爲外部表是一個臨時工作表,它由進程填充了特定值。派生表中的Oracle SQL引用外部表字段嵌套查詢
下面的方法是不正確的,因爲它無法正確引用外部表。有沒有更好的方法來寫這個?
下面是我怎麼想它的工作的例子:
TABLE CUST
EMP DATE VALUE
1 1/1/17 R
2 2/1/17 R
TABLE TEMP1
EMP DATE USER1 USER4
1 3/2/16 3 4
1 5/1/17 3 3
2 2/1/17 9 2
TABLE TEMP2
DATE VALUE USER4
1/1/01 S 100
1/1/03 P 200
1/3/07 R 300
8/1/17 R 350
TABLE TEMP3
EMP DATE VALUE
1 3/2/16 R
1 5/1/17 R
2 2/1/17 R
樣本輸出應該是::
SELECT A.EMP, X.SCHEDULE, A.DATE FROM CUST A, (SELECT T1.EMP, T1.NAME, CASE WHEN T1.USER1 = '3' THEN T2.USER4 ELSE T1.USER4 END AS Schedule
FROM TEMP1 T1, TEMP2 T2, TEMP3 T3
WHERE T1.EMP = T3.EMP
AND T2.VALUE= T3.VALUE
AND T1.DATE = (SELECT MAX(T1A.DATE) FROM TEMP1 T1A
WHERE T1A.EMP = T1.EMP
AND T1A.DATE <= A.DATE)
AND T2.DATE = (SELECT MAX(T2A.DATE) FROM TEMP2 T2A
WHERE T2A.VALUE= T2.VALUE
AND T2A.DATE <= A.DATE)
AND T3.DATE = (SELECT MAX(T3A.DATE) FROM TEMP3 T3A
WHERE T3A.EMP = T3.EMP
AND T3A.VALUE = T3.VALUE
AND T3A.DATE <= A.DATE)) X
WHERE A.EMP = X.EMP
AND X.EMP IN ('1','2');
下面是一些示例數據和結果
EMP SCHEDULE DATE
1 300 1/1/17
2 2 2/1/17
你能用例子來解釋嗎?預期的和實際的輸出將使它看起來更好 – Valli
對他人理解的絕望的查詢。我建議你學習正確的,明確的'JOIN'語法。您也可以解釋查詢應該做什麼,提供樣本數據和期望的結果。可能有一個更簡單的方法。 –
@valli我已經添加了一些測試場景 – Help123