我有两张桌子。第一个是表Employees
,第二个是TimeCard
。我正在尝试确定员工何时不在。样品表:
因此,如果员工姓名符合以下条件,则返回员工姓名:Status
= 1 和Date
!= '8/27/13'。Employee
但是,即使TimeCard
表中有多个整数,只要它们不在指定日期,我也只希望返回一次。
我有两张桌子。第一个是表Employees
,第二个是TimeCard
。我正在尝试确定员工何时不在。样品表:
因此,如果员工姓名符合以下条件,则返回员工姓名:Status
= 1 和Date
!= '8/27/13'。Employee
但是,即使TimeCard
表中有多个整数,只要它们不在指定日期,我也只希望返回一次。
尝试这个:
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)
尝试以下操作:
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 月 7 日或 2007 年 6 月 5 日......
2.编辑:
显然,在您组装 SQLfiddle 时准备晚餐不是一个好主意!整件事都是马车。我刚刚修复了它,当然更正了错字,t.Date != '8/27/13'
很抱歉造成混乱!在此处查看更正的小提琴:http ://sqlfiddle.com/#!3/26454/1