如何在Oracle数据库中加入一对多表

时间:2016-12-27 21:47:19

标签: sql database oracle join database-design

我有四张桌子: 订单,员工,供应,Supply_company

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,我们有一个供应商desc。我希望根据Supplier_desc显示Emp_id。我得到了与所有订单相关的所有描述,但我需要针对特定​​订单获取特定的desc,我尝试了distinct,listagg,内部联接和左外部联接,并在where子句中使用了子查询,但我没有找到任何解决方案

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

假设您有一个特定的EMP_ID和一个ORDER_ID,以下查询将为您提供与该员工和订单相关联的EMP_NAME和所有SUPPLIER_DESC:

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,到可以找到SUPPLIER_DESC的SUPPLY_COMPANY,然后使用WHERE子句将结果过滤到我们关心的特定员工和订单 - 并且因为您可能不喜欢#39;我想要重复的行,我们在SELECT标准上放置了DISTINCT,告诉我们我们只想要每个唯一组合的一个例子。只需将your_emp_idyour_order_id替换为您感兴趣的EMP_ID和ORDER_ID值。请注意,如果您提供的EMP_ID和ORDER_ID在EMPLOYEE和ORDER表上没有任何共同点,那么您可以#39;此查询不会返回任何内容。

祝你好运。