Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.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 获取与至少一名其他员工同时进入项目的所有员工的姓名_Mysql_Sql_Database_Oracle - Fatal编程技术网

Mysql 获取与至少一名其他员工同时进入项目的所有员工的姓名

Mysql 获取与至少一名其他员工同时进入项目的所有员工的姓名,mysql,sql,database,oracle,Mysql,Sql,Database,Oracle,问题: 获取与至少一名其他员工同时进入项目的所有员工的姓名。 我有四个表:员工、部门、项目、工作,如下所示。 我尝试了以下查询: SELECT emp_fname, emp_lname FROM employee a, works_on b WHERE a.empno=b.empno; 请让我知道我所做的有什么问题?为此,您需要在两个表上同时使用Employee(emp_no、emp_fname、emp_lname)和workson(emp_no、Enter_date)关系,通过emp_

问题: 获取与至少一名其他员工同时进入项目的所有员工的姓名。

我有四个表:员工、部门、项目、工作,如下所示。 我尝试了以下查询:

SELECT
emp_fname,
emp_lname 
FROM employee a, 
works_on b 
WHERE a.empno=b.empno;

请让我知道我所做的有什么问题?

为此,您需要在两个表上同时使用Employee(emp_no、emp_fname、emp_lname)和workson(emp_no、Enter_date)关系,通过emp_no链接


在查询中,您只使用了与检查项目提交时间无关的Employee表。

首先,您的查询将返回曾在任何项目上工作过的员工姓名,最好使用
内部联接。
如果我理解正确;您需要在同一项目(比如ProjectX)上工作的员工,以及在同一时间进入ProjectX的员工,并且必须至少有两名员工在ProjectX上有相同的时间

如果我对上述观点正确: 您需要对数据进行分组。例如,第一组至少有2个相同日期的项目,如

SELECT Project_no, Enter_date FROM Works_on having Count(emp_no)>=2
这将为您提供所有员工人数大于或等于2的项目和日期。现在我们可以找到在这些日期从事这些项目的员工

SELECT emp_fname, emp_lname FROM Employee INNER JOIN Works_on AS WO ON WO.emp_no=Employee.emp_no 
INNER JOIN 
(
    SELECT Project_no, Enter_date FROM Works_on having Count(emp_no)>=2
) AS PWith2MoreEmployee 
ON PWith2MoreEmployee.Project_no=WO.Project_no 
AND 
PWith2MoreEmployee.Enter_date=WO.Enter_date

我希望这将为您提供所需信息。

您可以使用以下任一查询获得所需结果。我使用了partition by子句对相关数据进行分组

WITH QUERY1 AS (
SELECT EMP_NO,ENTER_DATE, COUNT(*) OVER (PARTITION BY ENTER_DATE ORDER BY EMP_NO ) "t" FROM works_on)
select t2.emp_fname, t2.emp_lname from query1 t1 inner join employee t2 on t1.emp_no=t2.emp_no where "t">1;

select emp_fname, emp_lname from employee where emp_no in (
SELECT EMP_NO FROM (
SELECT EMP_NO,ENTER_DATE, COUNT(*) OVER (PARTITION BY ENTER_DATE ORDER BY EMP_NO ) "t" FROM works_on
) query1 where query1."t">1);

1.不要使用逗号连接语法。曾经