2009-10-23 59 views
0

我有這個疑問:額外的條件被忽略

SELECT 
     TA.id, 
     T.duration,   
     DATE_FORMAT(TA.startTime,'%H:%i') AS startTime, 
     TEI.displayname, 
     TA.threatment_id, 
     TE.employeeid, 
     TTS.appointment_date 
    FROM 
     tblEmployee AS TE 
     INNER Join tblEmployeeInfo AS TEI ON TEI.employeeinfoid = TE.employeeinfoid 
     LEFT OUTER Join tblAppointment AS TA ON TE.employeeid = TA.employee_id 
     LEFT OUTER Join tblThreatment AS T ON TA.threatment_id = T.threatmentid 
     LEFT OUTER Join tblAppointments AS TTS ON TTS.id = TA.appointments_id 
      AND TTS.appointment_date = '2009-10-19' 
     LEFT OUTER Join tblCustomerCard AS TCC ON TCC.customercardid = TTS.customercard_id 
    WHERE 
     TE.employeeid = 1 

我試圖做到的是要選擇一個員工,如果有的話,所有約會在一個給定的日期。在沒有任何約會時,至少應該提供關於員工的信息。

但現在,它只是提供所有與僱員有關的約會,並且在日期不匹配時傳遞null。這裏有什麼問題?

+0

也許你需要()圍繞兩個條件來評估兩者?值得一試。 – pyrocumulus 2009-10-23 13:52:44

+0

那裏沒有運氣。 – Ikke 2009-10-23 14:10:51

回答

2

因爲您正在執行左外部連接,所以它只會連接符合條件的記錄,並且在條件未滿足時將連接空值。

您仍將獲得該日期沒有約會的記錄。

如果您進行了INNER連接,那麼如果未滿足On條件,則不會輸出任何記錄。所以你不會得到那天沒有約會的記錄。

+0

因此,我想要實現的基本不可能,並且必須使用兩個不同的查詢來獲取信息? – Ikke 2009-10-23 14:16:58

+0

對不起..剛剛重讀你的原始查詢。這可能是可能的,但我認爲邏輯上你試圖得到兩個不同的東西,所以兩個查詢會更有意義。 – 2009-10-23 14:22:11

0

好了,不知道你是什麼數據庫,但這的SQL服務器上運行:反正

select * from tblEmployee TA 
... 
left join 
(select * from tblAppointments ed where ed.appointment_date = '10/01/2008') TTS 
on ON TTS.id = TA.appointments_id 

那盛傳!你可能需要修補一下。我在工作,不能讓整個事情都爲你做! :)