问题: 获取与至少一名其他员工同时进入项目的所有员工的名字和姓氏。
我有四个表Employee,Department,Project,Works_on,如下所示。 我尝试了查询:
SELECT
emp_fname,
emp_lname
FROM employee a,
works_on b
WHERE a.empno=b.empno;
请让我知道我在做什么有什么问题?
答案 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
我希望这会给你你想要的东西。