Есть 3 таблицы:
CREATE TABLE Employee(
EID mediumint PRIMARY KEY AUTO_INCREMENT,
EName varchar(100) DEFAULT NULL,
EPincode mediumint unsigned NULL
);
EID - это идентификатор сотрудника каждого сотрудника, который является уникальным;
CREATE TABLE Project(
PID mediumint PRIMARY KEY AUTO_INCREMENT,
PName varchar(30) DEFAULT NULL,
MID mediumint UNIQUE NOT NULL,
FOREIGN KEY (MID) REFERENCES Employee(EID)
);
MID - это идентификатор менеджера сотрудника, который возглавляет проект.
CREATE TABLE Works_On(
EID mediumint NOT NULL,
PID mediumint NOT NULL,
FOREIGN KEY (EID) REFERENCES Employee(EID),
FOREIGN KEY (PID) REFERENCES Project(PID)
);
Эта таблица состоит из всех сотрудников и их ассоциированного проекта.
Сотрудник может работать с несколькими проектами. Проект может выполняться несколькими сотрудниками. Каждый проект имеет менеджера. Менеджер может иметь под собой одного или нескольких сотрудников.
Я хочу найти таблицу, состоящую из имени сотрудника, имени проекта и имени менеджера. Пожалуйста помоги.
Это запрос, который я написал до сих пор, но его не работает:
SELECT DISTINCT A.EName AS "Employee Name"
,A.PName AS "Project Name"
,B.EName AS "Manager Name"
FROM (SELECT P.PName
,E.EName
from Works_On W
NATURAL JOIN Project P
NATURAL JOIN Employee E) A,
(SELECT E.EName
from Project P
INNER JOIN Employee E ON P.MID = E.EID) B
select A.Employee_name,
A.project_name,
B.manager_name from
(
SELECT
P.PName AS project_name,
E.EName AS Employee_name,
E.EID,P.PID
FROM Works_On W
INNER JOIN Project P ON W.PID = P.PID
INNER JOIN Employee E ON W.EID = E.EID
) as A
left join
(
SELECT
E.EName AS manager_name,
E.EID,P.PID
FROM Project P
INNER JOIN Employee E ON P.MID = E.EID
) B on A.PID=B.PID
SELECT P.PName AS ProjectName,
M.EName AS ManagerName,
E.EName AS EmployeeName
FROM Project P
LEFT JOIN Employee M ON (P.MID=M.EID)
LEFT JOIN Works_On WO on (P.PID=WO.PID)
LEFT JOIN Employee E on (E.EID=WO.EID);
Это сработало.
Вы можете попробовать выполнить запрос -
SELECT
E.EName,
P.PName,
M.EName
FROM Employee E
INNER JOIN Employee M ON M.EID = E.EID
INNER JOIN Project P ON E.EID = P.MID
INNER JOIN Works_On W ON W.EID = E.EID AND W.PID = P.PID
Это может вам помочь.