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

Откуда:
Сообщений: 6
Здравствуйте.

Условие.
Есть некая таблица adress с полями
id, id_gorod, id_street, id_oblast, id_rayon.
и четыре справочника с парами ключ-значение (id, name)
gorod, street, oblast, rayon

Как написать запрос что бы в случае если один из индентификаторов в главной таблице не указан, то выводилось "хоть что нибудь".

если просто написать
select gorod.name, street.name, oblast.name, rayon.name from adress, gorod, street, oblast, rayon where (adress.id_gorod=gorod.id)and(adress.id_street=street.id)and(adress.id_oblast=oblast.id)and(adress.id_rayon=rayon.id);

то в случае, если у объекта окажется, допустим не заполнено поле id_rayon, то запрос ничего не выведет, т.к. rayon.id не может быть null или просто пустым.
А хотелось бы написать такой запрос что бы если какое то id_xxxx было null, то запрос выводил все имеющиеся данные а которые null, выводил путое значение.

id_gorod, id_street, id_oblast, id_rayon нельзя сделать not_null, по двум причинам, во первых изменить базу я немогу, я могу только выполнить к ней запрос, а во вторых у какого либо объекта действительно может не быть района.

И вообще возможно ли написать такое средствами sql или на худой конец MS SQLServer, не прибегая к программированию на ЯВУ.

Спасибо.
23 июл 12, 15:14    [12903077]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с выборкой по условию  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
outer join
23 июл 12, 15:15    [12903084]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с выборкой по условию  [new]
Klick
Member

Откуда: Стерлитамак - Москва
Сообщений: 1023
Woron
from adress, gorod, street, oblast, rayon


Мммм, какой стайл! Давно не видел :)

SELECT gorod.name,
       street.name,
       oblast.name,
       rayon.name
FROM   adress
       LEFT OUTER JOIN gorod
                    ON adress.id_gorod = gorod.id
       LEFT OUTER JOIN street
                    ON adress.id_street = street.id
       LEFT OUTER JOIN oblast
                    ON adress.id_oblast = oblast.id
       LEFT OUTER JOIN rayon
                    ON adress.id_rayon = rayon.id 
23 июл 12, 16:29    [12903877]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить