2017-02-12 36 views
-1
SELECT 
    C.C_CODE, I.INV_NUM, I.INV_DATE, P.DESCRIPT, L.L_UNITS, L.L_PRICE 
FROM 
    CUSTOMER C 
JOIN 
    (SELECT * 
    FROM INVOICE I 
    JOIN 
     (SELECT * 
      FROM LINE L 
      JOIN (SELECT * FROM PRODUCT) P ON P.P_CODE = L.P_CODE) LP ON I.INV_NUM = LP.INV_NUM 
      ORDER BY I.INV_NUM DESC) ILP ON C.C_CODE = ILP.C_CODE 
ORDER BY 
    C.C_CODE; 

這是錯誤我得到:任何人都可以請告訴我爲什麼我得到ora-00904的錯誤?

ORA-00904: 「L」 「L_PRICE」:無效的標識符
00904. 00000 - 「%s的:無效的標識符

+0

你有沒有想過縮進select語句,使其更易讀一點 –

+0

對不起,我是新來的堆棧溢出並不知道如何編輯 –

回答

1

您已對錶名稱進行了更改,因此表L在上選擇級別上不可用 您應該使用您已分配給與列相關的選擇的正確(最後一個)(ILP)表名稱L_PRICE

,或者你沒有L_PRICE列在表

SELECT 
     C.C_CODE, I.INV_NUM, I.INV_DATE, P.DESCRIPT, L.L_UNITS, L.L_PRICE 
    FROM 
     CUSTOMER C 
    JOIN 
     (SELECT * 
      FROM INVOICE I 
      JOIN 
        (SELECT * 
         FROM LINE L 
         JOIN (SELECT * FROM PRODUCT) P ON P.P_CODE = L.P_CODE 
        ) LP ON I.INV_NUM = LP.INV_NUM 
        ORDER BY I.INV_NUM DESC 
     ) ILP ON C.C_CODE = ILP.C_CODE 
    ORDER BY 
     C.C_CODE; 
+0

我有L_PRICE的一列,ILP是不是加工。 –

+0

@P_S。你已經改名了(通過JOIN)原始表,所以你必須使用這個重命名的表名來標識列...尋找你的代碼,這似乎是ILP,但已重新命名了幾次表...(可能是你需要顯式列) – scaisEdge

0

表的別名L只有內子查詢範圍

您的子查詢有別名ILP;使用:

SELECT ..., ILP.L_STATUS 
+0

ILP無法正常工作。 –

相關問題