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

Откуда: Ukraine
Сообщений: 160
create table kli (klient varchar(100), town int, street int);
create table towns (kodt int, name varchar(100));
create table streets (kodt int, kods int, name varchar(100));
insert into towns values (1, 'Киев');
insert into towns values (2, 'Львов');
insert into streets values (1, 1, 'Крещатик');
insert into streets values (1, 2, 'Лумумбы');
insert into streets values (2, 1, 'Замковая');
insert into streets values (2, 2, 'Хмельницкого');
insert into kli values ('Кафе 3 дубка', 1, 1);
insert into kli values ('ООО Монитор', 2, 2);
insert into kli values ('ООО Факел', 2, 5);
insert into kli values ('Турагенство Пикник', 4, null);
insert into kli values ('Фирма Каскад', 3, 1);
insert into kli values ('Клуб четырех коней', 1, null);
insert into kli values ('Казино 777', null, null)
/
select klient, t.name, s.name
from kli, towns t, streets s
where (t.kodt=s.kodt or s.kods is null)
and kli.town=t.kodt(+) and kli.street=s.kods(+)
/
drop table kli;
drop table towns;
drop table streets
Обращаю внимание, структура справочника адреса здесь составная и меняться не должна.
В результате выводятся данные только для пяти клиентов.
KLIENTNAMENAME_1
Кафе 3 дубкаКиевКрещатик
Клуб четырех конейКиев
ООО МониторЛьвовХмельницкого
ООО ФакелЛьвов
Турагенство Пикник
Казино 777

Как изменить запрос, чтобы вывести недостающего клиента (Фирма Каскад), без адреса, как и для Казино 777?
Спасибо.

Oracle 8 + SQL Nav 4
5 сен 07, 18:18    [4625778]     Ответить | Цитировать Сообщить модератору
 Re: Связать три таблицы с неполными данными  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
Сделайте подзапрос, где свяжите towns t и streets, а потом уже outer-ом
5 сен 07, 18:29    [4625844]     Ответить | Цитировать Сообщить модератору
 Re: Связать три таблицы с неполными данными  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
select klient, t.name, s.name
from kli, towns t, streets s
where kli.town  = t.kodt(+)
  and kli.town  = s.kodt(+)
  and kli.street= s.kods(+)
5 сен 07, 18:33    [4625865]     Ответить | Цитировать Сообщить модератору
 Re: Связать три таблицы с неполными данными  [new]
<>
Guest
???
where (t.kodt=s.kodt or s.kods is null)
where nvl(t.kodt, -1) = nvl(s.kodt, -1)
5 сен 07, 18:37    [4625886]     Ответить | Цитировать Сообщить модератору
 Re: Связать три таблицы с неполными данными  [new]
Zum-Zum
Member

Откуда: Ukraine
Сообщений: 160
Вариант от SQL*Plus оказался самым действенным и верным, спасибо.
5 сен 07, 18:49    [4625960]     Ответить | Цитировать Сообщить модератору
 Re: Связать три таблицы с неполными данными  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116202
<>
???
where (t.kodt=s.kodt or s.kods is null)
where nvl(t.kodt, -1) = nvl(s.kodt, -1)


Неверно. Внимательно посмотрите.
5 сен 07, 18:51    [4625967]     Ответить | Цитировать Сообщить модератору
 Re: Связать три таблицы с неполными данными  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
Zum-Zum
Вариант от SQL*Plus оказался самым действенным и верным, спасибо.
Обычное внешнее соединение (outer join)... :-)
На доброе здоровье!
5 сен 07, 19:04    [4626046]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить