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

时间:2016-03-19 05:57:00

标签: mysql sql database oracle

enter image description here

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

我有四个表Employee,Department,Project,Works_on,如下所示。 我尝试了查询:

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

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

3 个答案:

答案 0 :(得分:1)

为此你需要在两个表上使用通过emp_no链接的Employee(emp_no,emp_fname,emp_lname)和Works_on(emp_no,Enter_date)关系。

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

答案 1 :(得分:0)

您可以使用以下任一查询来获得所需的结果。我已经使用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);

答案 2 :(得分:-1)

首先,您的查询将返回曾参与任何项目的员工姓名,最好使用INNER JOIN。 如果我理解正确;您希望员工在同一个项目上工作(让我们说ProjectX),再想要同时进入ProjectX的员工,并且必须至少有2名员工在ProjectX上有相同的时间。

如果我对上述内容是正确的: 您需要对数据进行分组。例如,第一组项目至少有两个相同的enter_date,如

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

我希望这会给你你想要的东西。