mysql - 如何找到 DISTINCT 组合?
问题描述
有3张桌子:
CREATE TABLE Employee(
EID mediumint PRIMARY KEY AUTO_INCREMENT,
EName varchar(100) DEFAULT NULL,
EPincode mediumint unsigned NULL
);
EID 是每个 Employee 的 Employee-Id,它是唯一的;
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 是负责项目的员工的经理 ID。
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 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);
有效。
推荐阅读
- java - Java BufferedReader 冻结
- javascript - WebSocket 打开时间
- php - 如何从 UploadFile 类创建非映射派生 CV 类
- keras - 图像识别的类别不平衡
- spring-boot - 如何使用@ControllerAdvice 捕获 Spring boot 2 webflux 中的所有异常
- jquery - 如何在部分加载时绑定事件 Shopify
- java - Android - 有没有办法为服务使用消息处理程序并且仍然能够从绑定的活动中调用它的方法?
- flutter - 动画容器:RenderFlex 底部溢出 154 像素
- php - 如何通过 wordpress 页面上的插件呈现表单?
- analytics - couchbase 分析查询中是否允许 SELECT 中的双重计数