簡體   English   中英

根據另外兩個表從一個表中選擇值(關系)

[英]Select values from one table based on two other tables (relational)

我有3個表,一個表包含公司詳細信息,一個表包含管理人員詳細信息,一個表通過ID連接這兩個Company_Officer,以便我可以告訴哪個管理人員為哪個公司工作,他也可以為多個公司工作,並且一個公司可以有多個工人。

我正在嘗試創建一個查詢,該查詢將為我提供該官員為company_Id工作的公司的ID,官員姓名及其角色。 他工作的公司必須將company_index設置為FTSE 100,他的狀態Officer_resigned必須設置為0,並且他必須為1個以上的公司工作。

就像是:

Company_ID|Company_Name|Officer_Name|Officer_Role
--------------------------------------------------
1         |  Apple PLC |Millis, John|Director
1         | Apple PLC  |DLAMINI, Bob|Secretary
2         | Google PLC |Millis, Johm|Secretary

Company_Details:

http://i.stack.imgur.com/zxzUi.png

Officer_Details:

在此處輸入圖片說明

Company_Officer:

在此處輸入圖片說明

我已經開始擺弄sql了,但是對關系數據庫而言,這對我來說並沒有多大意義。 我了解我需要使用join。 一個查詢是否可以全部實現?

SELECT 
    CD.company_id,
    CD.company_name,
    OD.officer_name,
    CO.officer_role
FROM
    company_details CD
INNER JOIN company_officer CO 
   ON CD.company_id = CO.company_id
INNER JOIN officer_details OD 
   ON CO.officer_id = OD.officer_id
WHERE CD.company_index='FTSE 100' AND 
      OD.officer_resigned='0';

在此處輸入圖片說明

另一個sql的額外約束是“僅獲取那些為多家公司工作的人員”。

   SELECT cd.company_id,
           cd.company_name,
           od.officer_name,
           co.officer_role
    FROM   COMPANY_DETAILS cd
           inner join COMPANY_OFFICER co
                   ON cd.company_id = co.company_id
           inner join OFFICER_DETAILS od
                   ON co.officer_id = od.officer_id
    WHERE  cd.company_index = 'FTSE 100' AND
           od.officer_resigned = '0' AND
           co.officer_id IN
           ( SELECT officer_id
             FROM   COMPANY_OFFICER
             GROUP  BY officer_id
             HAVING Count( DISTINCT company_id ) > 1 
           );

你甚至需要加入嗎?

SELECT DISTINCT c.Company_ID, c.Company_Name, o.Officer_Name, o.Officer_Role
FROM Company_Details c, Officer_Details o, Company_Officer co
WHERE Company_Index = 'FTSE 100' AND Officer_Resigned = 0 AND co.Officer_ID = o.Officer_ID AND co.Company_ID = c.Company_ID

只需在3個表之間使用內部聯接

select 
       Company_Details.Company_ID
     , Company_Details.Company_Name
     , Officer_Details.Officer_Name
     , Company_Officer.Officer_Role
from Company_Details
INNER JOIN Officer_Details on Officer_Details.Officer_ID = Company_Officer.Officer_ID
INNER JOIN Company_Officer on Company_Officer.Company_ID = Company_Details.Company_ID;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM