Вывод результатов из нескольких sql-запросов в postgresql

У меня установлен postgresql-9.2 на моем локальном компьютере (под управлением Windows 7), и я также являюсь администратором. Я использую Инструмент запросов pgAdmin III для запроса моей базы данных. Моя проблема заключается в следующем:

Скажем, у меня есть две таблицы Table_A и Table_B с разным количеством столбцов. Кроме того, скажем, у меня есть два очень простых запроса:

select * from Table_A;
select * from Table_B;

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

Я также попробовал команду копирования и вывод в csv. Но вместо добавления к файлу он перезаписывает его. Итак, я всегда получаю результаты только из запроса 2. То же самое происходит и с графическим интерфейсом.

Очень раздражает комментировать один запрос, запускать другой, выводить в два разных файла, а затем объединять эти два файла вместе.


person PS1    schedule 09.06.2013    source источник
comment
Если таблицы имеют одинаковую структуру, используйте union   -  person Clodoaldo Neto    schedule 09.06.2013
comment
Вы можете использовать union all, заполняя столбцы null по мере необходимости. Каковы определения таблицы?   -  person Denis de Bernardy    schedule 09.06.2013
comment
@Denis - скажем, это структуры таблиц: Table_A (col_A, col_B); Таблица_B (столбец_c, столбец_D, столбец_E, столбец_F)   -  person PS1    schedule 10.06.2013
comment
@ PS1: определение таблицы — это больше, чем просто имена столбцов. Рассмотрите этот комментарий   -  person Erwin Brandstetter    schedule 10.06.2013
comment
Это больше похоже на вопрос о клиенте SQL, а не о Postgres. Может быть, попробовать другой клиент SQL?   -  person a_horse_with_no_name    schedule 20.11.2015


Ответы (3)


В настоящее время это не поддерживается PostgreSQL — из документации (http://www.postgresql.org/docs/9.4/interactive/libpq-exec.html):

Командная строка может включать несколько команд SQL (разделенных точкой с запятой). Несколько запросов, отправленных в одном вызове PQexec, обрабатываются в одной транзакции, если только в строку запроса не включены явные команды BEGIN/COMMIT для разделения ее на несколько транзакций. Обратите внимание, однако, что возвращаемая структура PGresult описывает только результат последней команды, выполненной из строки. В случае сбоя одной из команд обработка строки останавливается вместе с ней, а возвращаемый PGresult описывает состояние ошибки.

person Ibrahim Dauda    schedule 30.12.2015

Ваша проблема не зависит от клиента.

Предполагая, что все столбцы имеют тип text, попробуйте выполнить следующий запрос:

SELECT col_a AS col_ac, col_b AS col_bd
      ,NULL::text AS col_e, NULL::text AS col_f
FROM   table_a

UNION  ALL
SELECT col_c, col_d, col_e, col_f
FROM   table_b;

Имена столбцов и ленты данных определяются первой ветвью файла UNION SELECT. Остальное должно встать в очередь.

person Erwin Brandstetter    schedule 10.06.2013

Вы можете использовать UNION ALL, но вам нужно убедиться, что каждый подзапрос имеет одинаковое количество столбцов.

SELECT 'a', 'b'
UNION ALL
SELECT 'c' ;

не будет работать.

SELECT 'a', 'b'
UNION ALL
SELECT 'c', 'd'

будет работать

person ra1    schedule 20.11.2015