Ниче не понимаю с LEFT JOIN. Или у меня глюк или у MySQL

Krin

Guest
Ниче не понимаю с LEFT JOIN. Или у меня глюк или у MySQL

Есть таблицы USERS в которой есть поля USERS_ID и USERS_NAME и где забит список сотрудников. Есть вторая таблица WORK, в которой есть поля WORK_ID, WORK_TYPE и WORK_DATE. В этой таблице отмечается, была ли сделана работа определенным пользователем, ее тип и дата. Для каждого работника может быть только одна работа. Но тип ее может быть разный.
Хочется получить результат, в котором будут присутствовать все сотрудники из таблицы USERS и дата выполненой работы из второй таблицы WORK.WORK_DATE, а если нет, то NULL. Вроде бы элементарный запрос и все просто.

select
u.`USERS_ID`,
u.`USERS_NAME`,
w.`WORK_DATE`
from `USERS` as u left join `WORK` as w on u.`USERS_ID`=w.`USERS_ID`
where w.`WORK_TYPE` =1 or w.`WORK_TYPE` is null

Но почему то возвращается таблица сотрудников только тех, у которых есть выполненная работа WORK_TYPE=1. Остальные не выводятся. На сколько я понимаю, LEFT JOIN должен вывести первую таблицу целиком, а вторую только с совпадающим результатом. Блин, уже голову сломал на ровном месте. В чем я пропираюсь ?
 

Steamroller

Новичок
По-моему опечатка у тебя в условии, надо work_type is null, а не work_type=1 is null.
 

Krin

Guest
Да, опечатка эта когда я здесь в форуме это правил. В запросе который я делал все правильно и все равно нихрена не работает. Версия MySQL 4.1
 

Steamroller

Новичок
Но почему то возвращается таблица сотрудников только тех, у которых есть выполненная работа WORK_TYPE=1. Остальные не выводятся. На сколько я понимаю, LEFT JOIN должен вывести первую таблицу целиком, а вторую только с совпадающим результатом.
Вообще-то не совсем так, первую таблицу он не целиком должен вывести - например сотрудники с work_type=2 не выведутся таким запросом.

-~{}~ 25.11.05 04:04:

Попробуй условие перенести из where в on, что-то типа:
from `USERS` as u left join `WORK` as w on u.`USERS_ID`=w.`USERS_ID` and w.`WORK_TYPE` =1;
 

Krin

Guest
Автор оригинала: Steamroller
Вообще-то не совсем так, первую таблицу он не целиком должен вывести - например сотрудники с work_type=2 не выведутся таким запросом.

-~{}~ 25.11.05 04:04:

Попробуй условие перенести из where в on, что-то типа:
from `USERS` as u left join `WORK` as w on u.`USERS_ID`=w.`USERS_ID` and w.`WORK_TYPE` =1;
Спасибо, все заработало. Блин, 2 года пишу на DB2 и там этот запрос отлично работает. А в MySQL видимо свои замуты. Еще раз спасибо.
 
Сверху