我有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:
Officer_Details:
Company_Officer:
我已经开始摆弄sql,但对于关系数据库来说,这对我来说没什么意义。我知道我需要使用join。是否可以通过一个查询实现?
答案 0 :(得分:1)
答案 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;