Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Снова про запрос объединениях  [new]
Виктор_sql
Member

Откуда:
Сообщений: 98
Доброго дня, вопрос, может кто подскажет, как запрос построить:
есть данность в виде view, если упростить для примера, то структура которого похожа на такую:

SELECT id, A, N=1
FROM T1

UNION
SELECT id, A, N=2
FROM T2

UNION
SELECT id, A, N=3
FROM T3

Делаю запрос к этому View:

SELECT TT.id, V1.A as A1, V2.A as A2, V3.A as A3
FROM TT
LEFT JOIN View as V1
ON (TT.id = V1.id)
LEFT JOIN View as V2
ON (TT.id = V2.id)
LEFT JOIN View as V3
ON (TT.id = V3.id)
WHERE
(V1.N=1)
AND (V2.N=2)
AND (V3.N=3)

====================
Результат:

id A1 A2 A3
1 5 55 555
...
7 4 44 444

И все бы ничего, но если одна таблица, например, вторая, пуста, то строка с соответствующим id, для остальных таблиц (с таким же номером id), не отображается, а хотелось бы, например получить что-то вроде:

6 1 NULL 111

Понятно, что причина в WHERE ..AND (V2.N=2), из-за которой условие для второй не выполнено. Как сделать правильно, чтобы появились дырки ?
Почитал про объединения, но пока не сообразил
12 фев 12, 14:17    [12076958]     Ответить | Цитировать Сообщить модератору
 Re: Снова про запрос объединениях  [new]
iljy
Member

Откуда:
Сообщений: 8711
Виктор_sql,

А чего тут соображать? У вас условие проверяется ПОСЛЕ соединения, а нужно, чтоб проверялось во время. Ну так и перенесите его из WHERE в соответствующий ON.
12 фев 12, 14:20    [12076974]     Ответить | Цитировать Сообщить модератору
 Re: Снова про запрос объединениях  [new]
Виктор_sql
Member

Откуда:
Сообщений: 98
Ок, делаем:

SELECT TT.id, V1.A as A1, V2.A as A2, V3.A as A3
FROM TT
LEFT JOIN View as V1
ON (TT.id = V1.id) AND (V1.N=1)
LEFT JOIN View as V2
ON (TT.id = V2.id) AND (V2.N=2)
LEFT JOIN View as V3
ON (TT.id = V3.id) AND (V3.N=3)

Вываливается около 2 тыс.строк с результатом NULL
Хотя в исходных двух таблицах по 6 записей, еще одна, как описывал, пустая.
Или не так я понял изменение запроса ?
12 фев 12, 17:08    [12077507]     Ответить | Цитировать Сообщить модератору
 Re: Снова про запрос объединениях  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Виктор_sql,

так у Вас же VIEW возвращает одно и то же значение id от одного до трёх раз!
Ведь одно и то же значение может быть и в T1, и в T2, и в T3.
JOIN по id приводят к появлению всех возможных комбинаций соответствующих строк.
12 фев 12, 17:42    [12077620]     Ответить | Цитировать Сообщить модератору
 Re: Снова про запрос объединениях  [new]
iljy
Member

Откуда:
Сообщений: 8711
Виктор_sql,

в исходных двух таблицах - каких? Это угадать надо? И кратность связей тоже? Если хотите конкретный внятный ответ, то бросайте партизанить и выполните пп4 и 6.
12 фев 12, 20:36    [12078219]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить