我有两张桌子。第一个是表Employees
,第二个是TimeCard
。我想确定员工何时不在这里。样本表:
如果符合以下条件,则会返回员工姓名:Status
= 1和Date
!='8/27/13'。但是我只希望Employee
返回一次,即使它们在TimeCard
表中有多个entires,只要它们不在指定日期。
答案 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)