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.不要使用逗号连接语法。曾经