Mysql 对于SQL中的所有查询,表分割
我有一个包含三个表的模式: 项目id、项目名称、负责人 员工emp_id、emp_名称 分配给项目标识、环境管理标识 我已经创建了所有表,其中包含 您可以查看所有数据选择*。。。在…上 请先查看SQLFIDLE上的表和数据 我有一个现有查询,用于获取至少在一个项目上工作的员工姓名,其中107员工也在该项目上工作:Mysql 对于SQL中的所有查询,表分割,mysql,sql,Mysql,Sql,我有一个包含三个表的模式: 项目id、项目名称、负责人 员工emp_id、emp_名称 分配给项目标识、环境管理标识 我已经创建了所有表,其中包含 您可以查看所有数据选择*。。。在…上 请先查看SQLFIDLE上的表和数据 我有一个现有查询,用于获取至少在一个项目上工作的员工姓名,其中107员工也在该项目上工作: select EMP_NAME from employee natural join `assigned-to` WHERE EMP_ID<>'107' AND PROJ
select EMP_NAME from employee natural join `assigned-to`
WHERE EMP_ID<>'107' AND
PROJECT_ID IN(
SELECT PROJECT_ID FROM `assigned-to`
WHERE EMP_ID='107'
)
GROUP BY EMP_NAME;
但现在我需要解决一个稍微不同的问题。我需要107号员工参与的所有项目的员工姓名
如何编写此问题的查询 您可以通过计算与该员工相同的其他员工的项目数量,然后只选择与原始员工数量完全匹配的项目
SELECT EMP_ID FROM `ASSIGNED-TO` WHERE PROJECT_ID IN
(SELECT PROJECT_ID FROM `ASSIGNED-TO` WHERE EMP_ID = '107')
AND EMP_ID <> '107'
GROUP BY EMP_ID
HAVING COUNT(*) = (SELECT COUNT(*) FROM `ASSIGNED-TO` WHERE EMP_ID = '107')
试试这个:
SELECT EMP_NAME
FROM EMPLOYEE NATURAL JOIN `ASSIGNED-TO`
WHERE EMP_ID<>'107' AND
PROJECT_ID IN (
SELECT PROJECT_ID FROM `ASSIGNED-TO`
WHERE EMP_ID='107'
)
GROUP BY EMP_NAME
HAVING COUNT(*)=(
SELECT COUNT(*)
FROM `ASSIGNED-TO`
WHERE EMP_ID='107'
);
请查看它是否继续运行。这也会起作用。我想验证是否在项目表中找到分配给的项目id
select e.emp_name
from employee e
natural join `assigned-to` a
where emp_id <> 107
and a.project_id in (
select project_id
from (
select emp_id, project_id
from employee natural join `assigned-to` natural join project
where emp_id = 107 ) t
)
group by e.emp_id
having count(project_id) = (select count(project_id) from `assigned-to` where emp_id = 107)
你试了什么?它是怎么工作的?你想要的结果是什么?我试着在@bohemianI想要所有参与所有项目的员工姓名中添加所有内容,其中员工ID为107的员工在@Md.sumankabir上工作。这只是一个评论,因为这似乎已经得到了回答,但我可以提供一些未来解决这个问题的观点。可以将其视为首先查看emp107工作过的项目,然后查找至少没有在其中一个项目上工作的员工。你已经知道该怎么做了。一旦你有了这份名单,你就可以从你的全部员工中把它颠倒过来。。。名单上没有任何一位员工完成了107所做的所有项目。谢谢,我没想到它能像这样轻易解决。。。多谢各位