如果结果存在于第二个表中,则过滤掉结果的查询

时间:2013-08-27 17:13:39

标签: sql sql-server-2008

我有两张桌子。第一个是表Employees,第二个是TimeCard。我想确定员工何时不在这里。样本表:

enter image description here

如果符合以下条件,则会返回员工姓名:Status = 1和Date!='8/27/13'。但是我只希望Employee返回一次,即使它们在TimeCard表中有多个entires,只要它们不在指定日期。

2 个答案:

答案 0 :(得分:0)

尝试以下方法:

SELECT e.employee FROM employees e 
WHERE status=1 
AND NOT EXISTS ( SELECT 1 FROM timecard t 
                 WHERE t.employee=e.employee 
                 AND t.Date = '8/27/13') 

其中'8/27/13'仅适用,如果date是varchar列。否则,您应该使用更标准的日期格式,例如'2013-8-27'

编辑:

在MSSQL中'8/27/13'实际上会起作用,但使用这种表示法仍然不是一个好主意,因为当使用较小的数字时,如'5/6/7'}并不明确。取决于谁进入(以及他们来自哪个国家),这可能意味着2007年5月6日,或2005年5月,2007年6月7日或5月...

2。修改

显然不是一个好主意准备晚餐,而你正在组建一个SQLfiddle!整件事都是马车。我刚修好它,当然用t.Date != '8/27/13'纠正了错误,对不起!请在此处查看更正的小提琴:http://sqlfiddle.com/#!3/26454/1

答案 1 :(得分:0)

试试这个:

SELECT DISTINCT e.employee 
FROM employees e
LEFT JOIN timecard t ON t.employee = e.employee
WHERE e.status = 1 AND (t.date != '8/27/13' OR t.date IS NULL)