根据另外两个表(关系)从一个表中选择值

时间:2016-06-23 14:13:08

标签: mysql sql

我有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:

enter image description here

Company_Officer:

enter image description here

我已经开始摆弄sql,但对于关系数据库来说,这对我来说没什么意义。我知道我需要使用join。是否可以通过一个查询实现?

4 个答案:

答案 0 :(得分:1)

log4net

enter image description here

答案 1 :(得分:1)

另一个sql用于额外约束"只获得那些为超过1家公司工作的人员#34;

   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 
           );

答案 2 :(得分:0)

你甚至需要加入吗?

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

只需在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;