0

我有一张员工表及其日程安排,如下所示:

Emp_Name | Date
--------  -----
Smith    | 08-01-2009
Jones    | 08-01-2009
Goodman  | 08-02-2009
Smith    | 08-02-2009
Jones    | 08-02-2009
Goodman  | 08-03-2009

我将如何编写查询,以便结果只是处理08-02-200908-03-2009.

我被赶上了,因为我能想到的只是获取 EITHER 匹配的名称的方法,但我似乎无法找到正确的方法来获取仅与多个搜索条件匹配的名称的结果行。

所以根据示例条件,我应该只得到古德曼。但是,如果我进行查询,WHERE Date IS (list of dates)我会得到 Goodman、Smith 和 Jones,因为 Smith 和 Jones 都在 2009 年 8 月 2 日工作。如果我尝试进行某种 JOIN,我不会总是得到相等的列,因为每个员工工作的天数是可变的。

我认为联合可能是要走的路,但我并不总是知道某人正在搜索的条件。

4

2 回答 2

2

这是我的第一次尝试,但可能有比使用 HAVING 更有效的方法......

SELECT Emp_Name,COUNT(DISTINCT date) as daycount 
FROM employee 
WHERE date IN ('08-01-2009', '08-02-2009')
GROUP BY Emp_Name
HAVING daycount=2 
于 2009-08-16T10:59:03.730 回答
0

如果您不需要通用解决方案,则可以使用:

select Emp_Name
from employee
where Emp_Name
  in (select Emp_Name from employee where Date = '08-02-2009')
  and in (select Emp_Name from employee where Date = '08-03-2009')
  ...
于 2009-08-16T11:10:07.900 回答