Database Oracle在多个表查询中仅获取最后1行数据

Database Oracle在多个表查询中仅获取最后1行数据,database,oracle,Database,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_S

我有一个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

我想要的是只从表中获取最后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年的历史了

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