как выбрать поле, сдержащее одно из различных полей

Запросы, планы, оптимизация запросов, ...

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

Ответить
qkama
Сообщения: 2
Зарегистрирован: 22 сен 2007, 04:37

как выбрать поле, сдержащее одно из различных полей

Сообщение qkama » 22 сен 2007, 04:56

Здравствуйте. Подскажите, возможно ли выбрать такое поле, в котором будет либо поле1 из таблицы 1 либо поле 2 из таблицы 2 и т.д., в зависимости от условия.

Поясню, для чего нужно:
есть таблица номеров телефонов и три различные (по списку полей и количеству записей) таблицы владельцев этих номеров. нужно создать запрос, формирующий новую таблицу, в которой будут отображены все телефонные номера.

mdfv
Сообщения: 119
Зарегистрирован: 23 май 2006, 15:53

Сообщение mdfv » 22 сен 2007, 06:55

join всех таблиц владельцев и формирование выходного поля ч-з case по условию не null (или другое, если есть) нужного поля из таблиц владельцев

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Сообщение Kotъ-Begemotъ » 22 сен 2007, 14:53

mdfv писал(а):join всех таблиц владельцев и формирование выходного поля ч-з case по условию не null (или другое, если есть) нужного поля из таблиц владельцев
Причём left join если отталкиваться от таблицы номеров, и not null не понадобится, просто если для номера не оказалось владельца, пустые поля будут. Но это, конечно от задачи, может и не надо "бесхозные" номера выводить...

mdfv
Сообщения: 119
Зарегистрирован: 23 май 2006, 15:53

Сообщение mdfv » 22 сен 2007, 19:25

Как вариант можно еще union .
Причём left join если отталкиваться от таблицы номеров, и not null не понадобится,
not null в case может быть условием показа того или иного владельца, если все остальные приджойненные поля владельцев null, иначе не выбрать кого показывать.
Если конечно в таблице телефонов жестко прописан тип владельца, то действительно не нужен.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 22 сен 2007, 19:37

mdfv писал(а):not null в case может быть условием ...
Для not null отлично подходит coalesce.
А вот для более сложного условия отбора уже да, нужен case. Наверное.

qkama
Сообщения: 2
Зарегистрирован: 22 сен 2007, 04:37

Сообщение qkama » 23 сен 2007, 19:31

спасибо за case. насчёт "бесхозных номеров" - таких в таблице нет, обязательно один из трёх таблиц будет владелец. там в таблице PHONES поле PARENT? содержащее ID владельца, у всех таблиц владельцев на ID один общий генератор и триггеры на него.
только не совсем поняла, как писать с кейсом, в обычном запросе в датасете его можно использовать? у Грубера с кейсом как-то непонятно.

Ответить