Проблема с LEFT JOIN.

Модераторы: kdv, CyberMax

Ответить
beresa
Сообщения: 9
Зарегистрирован: 05 дек 2007, 16:45

Проблема с LEFT JOIN.

Сообщение beresa » 05 дек 2007, 18:35

Изображение

Уважаемые, помогите разобраться.
У меня в базе есть отношение таблиц многие-ко-многим (рис. 1). Так вот, с помощью внешнего левого соединения хотел бы вытащить людей (таблица PERSON), связанных (и не связанных) с определённой работой.
Для этого составляю запрос (выбираем людей, занимающихся вязанием):

Код: Выделить всё

SELECT
    a.id_person,
    a.vc_person,
    b.id_make
FROM
    person a LEFT JOIN make b ON
    a.id_person=b.id_person
WHERE   
    b.id_work=1 

В результате получается набор данных, состоящих из 4-ёх строк (см. рисунок). Почему нет ещё одной строки (должен быть Дмитриев, а в столбце id_wok должно по идее стоять null)?

Требуемый набор данных мне удалось получить с помощью подзапроса (см. рисунк):

Код: Выделить всё

SELECT
    a.id_person,
    a.vc_person,
    (SELECT b.id_make
    FROM make b
    WHERE a.id_person=b.id_person and b.id_work=1)
FROM
    person a 
Но в моём случае это не решение проблемы (т.к. в реальной базе значительно больше таблиц и столбцов).

Как всё-таки получить требуемый набор данных?
Почему не работает левое внешнее соединение?

Ответить