Страница 1 из 1
как выбрать поле, сдержащее одно из различных полей
Добавлено: 22 сен 2007, 04:56
qkama
Здравствуйте. Подскажите, возможно ли выбрать такое поле, в котором будет либо поле1 из таблицы 1 либо поле 2 из таблицы 2 и т.д., в зависимости от условия.
Поясню, для чего нужно:
есть таблица номеров телефонов и три различные (по списку полей и количеству записей) таблицы владельцев этих номеров. нужно создать запрос, формирующий новую таблицу, в которой будут отображены все телефонные номера.
Добавлено: 22 сен 2007, 06:55
mdfv
join всех таблиц владельцев и формирование выходного поля ч-з case по условию не null (или другое, если есть) нужного поля из таблиц владельцев
Добавлено: 22 сен 2007, 14:53
Kotъ-Begemotъ
mdfv писал(а):join всех таблиц владельцев и формирование выходного поля ч-з case по условию не null (или другое, если есть) нужного поля из таблиц владельцев
Причём left join если отталкиваться от таблицы номеров, и not null не понадобится, просто если для номера не оказалось владельца, пустые поля будут. Но это, конечно от задачи, может и не надо "бесхозные" номера выводить...
Добавлено: 22 сен 2007, 19:25
mdfv
Как вариант можно еще union .
Причём left join если отталкиваться от таблицы номеров, и not null не понадобится,
not null в case может быть условием показа того или иного владельца, если все остальные приджойненные поля владельцев null, иначе не выбрать кого показывать.
Если конечно в таблице телефонов жестко прописан тип владельца, то действительно не нужен.
Добавлено: 22 сен 2007, 19:37
WildSery
mdfv писал(а):not null в case может быть условием ...
Для not null отлично подходит coalesce.
А вот для более сложного условия отбора уже да, нужен case. Наверное.
Добавлено: 23 сен 2007, 19:31
qkama
спасибо за case. насчёт "бесхозных номеров" - таких в таблице нет, обязательно один из трёх таблиц будет владелец. там в таблице PHONES поле PARENT? содержащее ID владельца, у всех таблиц владельцев на ID один общий генератор и триггеры на него.
только не совсем поняла, как писать с кейсом, в обычном запросе в датасете его можно использовать? у Грубера с кейсом как-то непонятно.