Дополнительное условие в предложении ON игнорируется - PullRequest
0 голосов
/ 23 октября 2009

У меня есть этот запрос:

    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 

То, что я пытаюсь выполнить, - это выбрать сотрудника, если таковой имеется, все назначения на определенную дату. Когда нет никаких назначений, он должен по крайней мере дать информацию о сотруднике.

Но сейчас он просто дает все встречи, связанные с сотрудником, и пропускает ноль, когда дата не совпадает. Что здесь не так?

Ответы [ 2 ]

2 голосов
/ 23 октября 2009

Поскольку вы выполняете левое OUTER-соединение, оно объединит только те записи, которые соответствуют условию On, и присоединит Null, если условие не выполнено.

Вы по-прежнему будете получать записи, для которых нет назначений на эту дату.

Если вы выполняли INNER соединение, то, если условие On не выполнено, запись не будет выводиться. Таким образом, вы не получите никаких записей, для которых нет назначений на эту дату.

0 голосов
/ 23 октября 2009

Хорошо, не уверен, в какой базе данных вы находитесь, но это будет работать на 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 

В любом случае, это вибрация! Возможно, вам придется немного повозиться. Я на работе и не могу заставить все это работать на вас! :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...