我正在尝试拿两张桌子,检查某人是否安排在一周中的某一天工作,如果有,请将其从结果中删除。我想最终只得到那些没有安排的,比如星期六。他们可能会按计划安排一周中的其他几天,但我不在乎。我只关心他们是否在我正在看的特定日子。
我有两张桌子。为简单起见,让我们说:
schedule_recurring:
ID, Date_Start, Employee_ID, Date_End
员工:
ID, FirstName, LastName
如何神圣地狱我会采取这种方式并创建一个SQL语句,它将为我提供在我正在查看的那天不可用的所有人,无论他们是否在一周的另一天工作。我一直在接待每一位员工,或者接近这一点。
我的目标是看一个人是否在一周中的某一天工作,如果他们这样做,我不在乎他们是否安排在一周中的另一天,我希望他们不在结果中。
下面的业余SQL语句:
SELECT
schedule_recurring.Date_Start,
employees.ID,
employees.FirstName,
employees.LastName
FROM schedule_recurring, employees
WHERE DAYNAME(Date_Start) != DAYNAME('2014-01-20') and
DATE(Date_End) > DATE(NOW()) AND
Employee_ID != employees.ID
GROUP BY employees.ID
感谢您的帮助!
答案 0 :(得分:1)
使用LEFT JOIN而不是multi-FROM,并过滤掉非NULL:
SELECT
schedule_recurring.Date_Start,
employees.ID,
employees.FirstName,
employees.LastName
FROM employees
LEFT JOIN schedule_recurring ON schedule_recurring.Employee_ID = employees.ID
AND DAYNAME(Date_Start) = DAYNAME('2014-01-20')
WHERE schedule_recurring.ID IS NULL
答案 1 :(得分:0)
使用LEFT JOIN,或阅读此JOIN语法:http://dev.mysql.com/doc/refman/5.0/en/join.html
SELECT sc.Date_Start, em.ID, em.FirstName, .em.LastName
FROM schedule_recurring AS sc
LEFT JOIN employees AS em ON(em.ID != sc.Employee_ID)
WHERE DAYNAME(sc.Date_Start) != DAYNAME('2014-01-20') and DATE(sc.Date_End) > DATE(NOW())
GROUP BY em.ID
P / s:为什么Employee_ID != employees.ID
,但您仍然从两个表中选择?
答案 2 :(得分:0)
试试这个: -
SELECT e.ID,e.FirstName,e.LastName,s.Date_Start
FROM schedule_recurring s
LEFT JOIN employees e ON e.ID = s.Employee_ID
WHERE DATE(s.Date_Start) != DATE('2014-01-20') and (DATE(s.Date_End) > DATE(NOW()))