2017-12-19 8 views
0

最後の1行のデータのみを取得するクエリはOracleです。Oracleは複数の表の最後の1行のデータを取得します。

SELECT 
R.FORM_NO, 
R.PART_NO, 
L.L_FORM_NO, 
L.HDR_ID, 
L.CP_ID_SLC_FORM_NO, 
S.FORM_NO, 
S.PART_NO, 
S.CP_ID 
FROM 
WA_T_QC_REVISION R, 
WA_T_QC_REVISION_LIST L, 
WA_T_QC_CP_SELECTED S 
WHERE 
R.FORM_NO = L.HDR_ID AND 
S.FORM_NO = L.CP_ID_SLC_FORM_NO AND 
R.PART_NO = 'PA03670-B501' 
ORDER BY R.FORM_NO DESC 

私はこのようになり、クエリを追加しようとすると、

SELECT * FROM(
SELECT 
R.FORM_NO, 
R.PART_NO, 
L.L_FORM_NO, 
L.HDR_ID, 
L.CP_ID_SLC_FORM_NO, 
S.FORM_NO, 
S.PART_NO, 
S.CP_ID 
FROM 
WA_T_QC_REVISION R, 
WA_T_QC_REVISION_LIST L, 
WA_T_QC_CP_SELECTED S 
WHERE 
R.FORM_NO = L.HDR_ID AND 
S.FORM_NO = L.CP_ID_SLC_FORM_NO AND 
R.PART_NO = 'PA03670-B501' 
ORDER BY R.FORM_NO DESC) 
WHERE ROWNUM <= 1 

私は私が望むどのようなエラーに

ORA-00918: column ambiguously defined 

を得ましたが、テーブルからのみ、最後の1行データを取得することです。

答えて

1

ここで直ちに解決するのは、同じ名前を持つ列に、同じ名前を持たないようにエイリアスすることです。

SELECT * FROM (
    SELECT 
     R.FORM_NO AS FORM_NO_R, 
     R.PART_NO AS PART_NO_R, 
     L.L_FORM_NO, 
     L.HDR_ID, 
     L.CP_ID_SLC_FORM_NO, 
     S.FORM_NO AS FORM_NO_S, 
     S.PART_NO AS PART_ON_S, 
     S.CP_ID 
    FROM WA_T_QC_REVISION R 
    INNER JOIN WA_T_QC_REVISION_LIST L 
     ON R.FORM_NO = L.HDR_ID 
    INNER JOIN WA_T_QC_CP_SELECTED S 
     ON S.FORM_NO = L.CP_ID_SLC_FORM_NO 
    WHERE 
     R.PART_NO = 'PA03670-B501' 
    ORDER BY R.FORM_NO DESC 
) 
WHERE ROWNUM <= 1 

明示的な内部結合で暗黙的な結合を置き換えたことにも注意してください。正式な結合構文を使用することは、質問を書くための好ましい方法です(これは25年以上にわたって行われています)。

関連する問題