Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
 SELECT * вместе с UNION ALL  [new]
BowMaster
Member

Откуда:
Сообщений: 13
Firebird 3.0. Есть программа, которая будет подключаться к разным базам, в них всех будет таблица скажем "MyTable", там будут разные поля и разное их количество, но мы точно знаем, что там будут некоторые поля(например "Name").

1)Задача: считать все поля из таблицы "MyTable", добавить в результат с помощью UNION ALL строки из другой таблицы, скажем "MyTable2"(поля в ней везде одинаковые если что), нужно только одно поле, остальные пусть будут null.

К примеру надо что-то вроде:
SELECT * FROM "MyTable"
UNION ALL
SELECT "Field1" AS "Name"  FROM "MyTable2" 


Получаем "count of column list and variable list do not match.". Можно ли как-то сделать так что бы после UNION ALL у нас в результат выдало бы те же поля что и в 1ом запросе, соответственно в поле "Name" - содержимое "MyTable2"."Field1", остальное заполнить null?

2)И еще интересует возможно ли осуществить такое:
SELECT *, 
CASE ...
WHEN ... THEN ...
END AS Y
FROM ...

То есть считать все поля, и добавить еще 1но создаваемое на основе другого(пример: если поле X = 0, то поле Y='ноль').

Если в обоих примерах записывать не SELECT *, а перечислить конкретные поля, то проблем нет. Что делать в ситуации, когда в таблице могут быть разные доп. поля и их надо вывести?

Сообщение было отредактировано: 24 июн 20, 15:51
24 июн 20, 15:50    [22156618]     Ответить | Цитировать Сообщить модератору
 Re: SELECT * вместе с UNION ALL  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50343

BowMaster
Что делать в ситуации, когда в таблице могут быть разные доп. поля и их надо вывести?

Не перекладывать работу клиента по обработке и выводу информации на сервер. Запрашивать
данные разными запросами.

Posted via ActualForum NNTP Server 1.5

24 июн 20, 16:05    [22156632]     Ответить | Цитировать Сообщить модератору
 Re: SELECT * вместе с UNION ALL  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11911
BowMaster
2)И еще интересует возможно ли осуществить такое:

SELECT t.*, 
CASE ...
WHEN ... THEN ...
END AS Y
FROM
  mytable t
......
24 июн 20, 16:33    [22156643]     Ответить | Цитировать Сообщить модератору
 Re: SELECT * вместе с UNION ALL  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 8569
BowMaster
перечислить конкретные поля, то проблем нет.
Вот так и делайте.
BowMaster
Что делать в ситуации, когда в таблице могут быть разные доп. поля и их надо вывести?
Как такое вообще возможно? правая нога не знает, что делает левая? поля в базе плодятся сами?
BowMaster
SELECT *
Аццкий АдЪ.
24 июн 20, 22:44    [22156831]     Ответить | Цитировать Сообщить модератору
 Re: SELECT * вместе с UNION ALL  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 981
BowMaster,

не так давно в соседней ветке обсуждается 'select *'. Костыль, который сломается сразу при первом же использовании. Может Вы не понимаете, что для UNION можно писать разные поля, никак не связанные друг с другом?
25 июн 20, 10:43    [22157023]     Ответить | Цитировать Сообщить модератору
 Re: SELECT * вместе с UNION ALL  [new]
BowMaster
Member

Откуда:
Сообщений: 13
Dimitry Sibiryakov

Запрашивать данные разными запросами.

Так и было, но была поставлена задача сделать иначе.

Ivan_Pisarevsky
BowMaster
перечислить конкретные поля, то проблем нет.
Вот так и делайте.
BowMaster
Что делать в ситуации, когда в таблице могут быть разные доп. поля и их надо вывести?
Как такое вообще возможно? правая нога не знает, что делает левая? поля в базе плодятся сами?
BowMaster
SELECT *
Аццкий АдЪ.

Если бы мне можно было сделать так, не спрашивал бы как сделать по-другому. Без обид, но ваши комментарии, на мой взгляд, самые бессмысленные.

KreatorXXI
BowMaster,
UNION можно писать разные поля, никак не связанные друг с другом

Сделал без UNION. Тему можно закрывать, спасибо за ответы.
25 июн 20, 22:36    [22157494]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить