2013-05-05 3 views
1

Я пытаюсь получить инструкцию SQL, где имена столбцов в SELECT являются подзапросом. Основной формат:sql select (column-name) в качестве подзапроса в postgreSQL

SELECT (<subquery for columns>) FROM Table; 

Мои подзапрос возвращает 4 строки имен полей, так что мне нужно, чтобы сделать их одной строкой. Я использовал:

SELECT array_to_string(array_agg(column_names::text),',') FROM Fieldnames; 

И тогда я получаю возвращенный формат col1, col2, col3, COL4 для моего 4 возвращается строки в виде строки. Если я вставляю в сыром тесте на мой запрос, он отлично работает как:

SELECT (col1, col2, col3, col4) FROM Table; 

Этот вопрос arrises когда я поставил два вместе. Я получаю нечетный ответ от psql. Я получаю:

?column? 
col1, col2, col3, col4 

без каких-либо строк, возвращенных для:

SELECT(SELECT array_to_string(array_agg(column_names::text),',') FROM Fieldnames) FROM Table; 

Концептуально, я думаю, что есть два пути я могу исправить это положение. Мне нужно вернуть мой подзапрос SELECT в формате, который можно поместить в качестве аргумента имени столбца в первый оператор SELECT, но поскольку я возвращаю несколько строк (одного значения varchar для имени столбца, которое я хочу) Я думал, что могу просто вставить их вместе, но я не могу. Я использую psql, поэтому у меня нет трюка списка «@».

Любые советы будут оценены.

Вот почему вопрос не является дубликатом и как я его решил. Стремясь упростить вопрос, который должен быть управляемым, он потерял свой сбор. Я закончил писать функцию, потому что я не мог использовать @ для передачи списка SELECT в postgreSQL. Если вы хотите выбрать только подмножество строк, вы не можете передать вложенный (SELECT) даже с AS, хотя это работает в Oracle. В результате я написал функцию, которая эффективно создала строку, а затем передала ее как SELECT. Кажется, что-то принципиально отличается от того, как парсер SQL в PostgreSQL обрабатывает аргументы для SELECT от Oracle, но каждый БД отличается.

Спасибо!

+0

Перепишите исходный вопрос, вместо того чтобы создать новый. –

+1

Посмотрите на динамический sql. http://www.postgresql.org/docs/current/static/sql-do.html –

+0

Это совершенно другой вопрос из предыдущих имен столбцов SQL и сравнение их с записями строк в другой таблице в PostgreSQL, поскольку он дает другой выпуск. "? Колонок?" является ключевым здесь. Я понятия не имею, почему это генерируется. –

ответ

1

Если вы заключите несколько имен столбцов в скобках, как вы делаете:

SELECT (col1, col2, col3, col4) FROM tbl; 

.. Вы эффективно создать специальную типа строкой из закрытых колонн, которые не имеют никакого названия, потому что вы не сделали предоставить псевдоним. Клиент предоставит резервную копию, например ?column?. Вы можете указать свое имя:

SELECT (col1, col2, col3, col4) AS my_row_type FROM tbl; 

Но вы, вероятно, просто хотите отдельные столбцы. Отбросьте круглые скобки:

SELECT col1, col2, col3, col4 FROM tbl; 
Смежные вопросы