Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 对于SQL中的所有查询,表分割_Mysql_Sql - Fatal编程技术网

Mysql 对于SQL中的所有查询,表分割

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

我有一个包含三个表的模式:

项目id、项目名称、负责人 员工emp_id、emp_名称 分配给项目标识、环境管理标识

我已经创建了所有表,其中包含 您可以查看所有数据选择*。。。在…上 请先查看SQLFIDLE上的表和数据

我有一个现有查询,用于获取至少在一个项目上工作的员工姓名,其中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;  

但现在我需要解决一个稍微不同的问题。我需要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所做的所有项目。谢谢,我没想到它能像这样轻易解决。。。多谢各位