ON子句中的额外条件被忽略

时间:2009-10-23 13:48:22

标签: mysql join

我有这个问题:

    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。这里出了什么问题?

2 个答案:

答案 0 :(得分:2)

因为您正在进行左OUTER连接,所以它只会加入那些与On条件匹配的记录,并在不满足条件时附加Null。

您仍将获得该日期没有约会的记录。

如果您进行了INNER连接,那么如果不满足On条件,则不会输出任何记录。所以你不会得到那个日期没有约会的记录。

答案 1 :(得分: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 

无论如何,这个氛围!你可能需要修补一下......我在工作,不能得到你的整个事情! :)