2016-12-27 45 views
-6

我有四個表: 訂單,員工,供應,Supply_company如何加入一個在Oracle數據庫中的許多表

Order 
------------------ 
Order_id 
Order name 
Emp_id 

Employee 
------------------ 
Emp_id 
Emp_name 

Supply 
-------------------- 
Supply_id 
Order_id 
SupplierName 

Supply_company 
---------------------- 
Supply_company_id 
Supply_id 
Supplier_desc 
address 

在這4代表一個員工都有一個以上的訂單,一個訂單有許多供應ID和那一個供應ID,我們有一個供應商描述。我想根據Emp_id顯示Supplier_desc。我得到所有與所有訂單相關的描述,但我需要特定的特定順序的desc,我嘗試了distinct,listagg,inner join和left outer join,並在where子句中使用了子查詢,但是我沒有找到任何解決方案。

+0

請在發佈問題前查看[問]和[mcve] – Aleksej

+0

將'WHERE Order.Order_id = XXX'添加到查詢中。 – Barmar

+0

7個問題,5個答案,沒有被接受。如果你不遵守現場規則,不要指望人們與你合作。 – Kacper

回答

0

SELECT 
    O.EMP_ID,SC.* 
FROM 
    SUPPLY_COMPANY SC 

INNER JOIN 

    SUPPLY S 
    ON S.Supply_id=SC.Supply_id 

INNER JOIN 
    Order O 
    ON O.Order_id=S.Order_id 

WHERE O.Emp_id=123 
+0

你想告訴提問者的一些解釋是有用的。謝謝。 –

0

假設你有一個特別的EMP_ID和ORDER_ID以下查詢將讓你的EMP_NAME,並與員工和訂單相關聯的所有SUPPLIER_DESCs:

SELECT DISTINCT e.EMP_ID, e.EMP_NAME, s.SUPPLIER_DESC 
    FROM EMPLOYEE e 
    INNER JOIN ORDER o 
    ON o.EMP_ID = e.EMP_ID 
    INNER JOIN SUPPLY s 
    ON s.ORDER_ID = o.ORDER_ID 
    INNER JOIN SUPPLY_COMPANY c 
    ON c.SUPPLY_ID = s.SUPPLY_ID 
    WHERE e.EMP_ID = your_emp_id AND 
     o.ORDER_ID = your_order_id 

在這裏,我們只是走從EMPLOYEE,通過ORDER和SUPPLY,到SUPPLY_COMPANY找到SUPPLIER_DESC,然後使用WHERE子句將結果過濾到特定的員工和我們關心的訂單 - 而且由於您可能不想重複行,所以我們放置了將SELECT條件中的DISTINCT設置爲te我們只需要每個獨特組合的一個例子。只需將your_emp_idyour_order_id替換爲您感興趣的EMP_ID和ORDER_ID值即可。請注意,如果您提供的EMPLOYEE和ORDER表中沒有任何共同之處的EMP_ID和ORDER_ID,則此查詢不會返回任何結果。

祝你好運。

相關問題