2014-01-22 88 views
-1

我試着拿兩張表,檢查是否有人被安排在一週中的某一天工作,如果有的話,將它們從結果。我只想結束那些沒有預定的那些,比方說週六。他們可能安排在schedule_recurring一週中的其他日子,但我不在乎。我只是在乎他們是否在我看的那一天。MySQL - 拿兩個表並返回一個不存在的結果

我有兩個表。爲簡單起見,假設:

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

什麼你期待?如果我沒有錯,你期待員工在特定的日期。 –

+0

使用Join會給出預期的結果,但是您使用的是Cartesian類型的查詢。 –

回答

1

使用左連接,而不是多FROM,和過濾非空值出:

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 
+0

你先生是friggin的嚮導。這似乎正是我所期待的。任何SQL書籍/教程你會推薦?謝謝! – user3084846

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但你仍然從兩個表中選擇?

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()))