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

Откуда:
Сообщений: 12
Здравствуйте.
есть 2 таблицы А(name varchar2, id int, id_b) и B(name varchar2, id int).

А и В связаны по полю id_b.

мне нужно выбрать все записи из А, но в результирующей выборке вместо id_b должен быть
соответствующий name из тыблицы В.

Проблема в том, что в id_b не всегда содержится идентификатор записи из В. Иногда там записоно -1,
что означает, что соответствующей записи нет.


Итак, задача:
мне нужно выбрать все записи из А, в результирующей выборке вместо id_b должен быть
соответствующий name из тыблицы В, если id_b != -1, и пустая строка, если id_b = 1.

Помогите пожалуйста написать запрос.

П.С.
Если id_b != -1, то гарантируется, что соответствующая запись есть в В.
9 дек 07, 21:52    [5024152]     Ответить | Цитировать Сообщить модератору
 Re: Изменения значения, возвращаемого select'om  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6913
CASE, DECODEюзайте. А вообще непонятно зачем поле для гарантии может объясните?
9 дек 07, 22:07    [5024182]     Ответить | Цитировать Сообщить модератору
 Re: Изменения значения, возвращаемого select'om  [new]
DTF
Member

Откуда:
Сообщений: 12
Ну..... я так глупо спроектировал базу :)

А не могли бы Вы привести пример с CASE или DECODE?
9 дек 07, 22:10    [5024187]     Ответить | Цитировать Сообщить модератору
 Re: Изменения значения, возвращаемого select'om  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54382
select a.id, a.name, b.name
from a, b
where nullif(a.id_b, -1) = b.id(+)
где-то так с извращениями :)
9 дек 07, 22:27    [5024236]     Ответить | Цитировать Сообщить модератору
 Re: Изменения значения, возвращаемого select'om  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54382
сорри... извращения не те
9 дек 07, 22:29    [5024246]     Ответить | Цитировать Сообщить модератору
 Re: Изменения значения, возвращаемого select'om  [new]
SimonInBlues
Guest
делаешь обычное внешнее объединение таблиц по условию a.id_b = b.id(+) да и все. А вообще, убери -1 из значений поля a.id_b, сделай поле необязательным и добавь нормальный внешний ключ на таблицу b, а то какая-то кривизна в твоих данных.
9 дек 07, 22:30    [5024249]     Ответить | Цитировать Сообщить модератору
 Re: Изменения значения, возвращаемого select'om  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6913
DTF
А не могли бы Вы привести пример с CASE или DECODE?

WHERE
  CASE
    WHEN a.id_b = -1 THEN a.name
    ELSE NULL
  END = b.name

WHERE DECODE(a.id_b, -1, a.name, NULL) = b.name

хотя поле с -1 - это бред :)
9 дек 07, 22:45    [5024309]     Ответить | Цитировать Сообщить модератору
 Re: Изменения значения, возвращаемого select'om  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
alex-ls
WHERE DECODE(a.id_b, -1, a.name, NULL) = b.name
ИМХО пример не самый удачный :)
Тем более что у автора данные наоборот, он просто несколько раз опечатался

to автор:
прислушайтесь к SimonInBlues. Опять же возможно Вас приятно удивит ускорение :)
10 дек 07, 10:46    [5025248]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить