我公司员工的表和他们的日程安排,像这样:

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工作的员工的员工姓名。

我被逮住,因为所有我能想到的办法得到了无论是比赛的名字,但我似乎无法找到合适的方式来获得只有那些比赛为所有搜索的名称的结果跨多个行的标准。

所以,基于示例条件,我应该只得到古德曼。但是,如果我做一个查询像WHERE Date IS (list of dates)我会得到Goodman和史密斯和琼斯,因为史密斯和琼斯在2009年8月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 

其他提示

如果你并不需要一个通用的解决方案,你可以使用这样的:

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')
  ...
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top