2017-02-13 2 views
0

Я вручную указывал имена столбцов всякий раз, когда я вносил некоторые изменения в свой запрос db в своем браузере. Затем я хотел, чтобы эта процедура была общей, поэтому я решил сделать запрос для имен столбцов.PostgreSQL, Получение имен столбцов из объединенной таблицы

До сих пор я читал некоторые другие потоки, кажется, что следующий код отлично работает для простых таблиц без каких-либо объединений.

select column_name 
from information_schema.columns 
where table_name='table_name'; 

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

Вот пример из моего текущего проекта, я соединяю три таблицы, используя внутренний запрос соединения.

select * 
from analytic 
inner join (select * from session_analytic 
    inner join (select session_uid from title_session where title_uid = '1234') 
    as n2 using(session_uid)) 
as n3 using(analytic_uid); 

как результат запроса я получаю

 
-------------------------------------------------------------------------------- 
|analytic_uid | total_playtime | total_frame | total_score | layer1_score |... | 
|-------------|----------------|-------------|-------------|--------------|----| 
|1   |   21.694 |   471 |   1 |   20 |... | 
|2   |   22.92 |   494 |   1 |   0 |... | 
|3   |   40.92 |   329 |   1 |   0 |... | 
|4   |   15.642 |   900 |   1 |   1 |... | 
|5   |  120.754 |  2400 |   0 |   0 |... | 
|6   |   5.878 |   323 |   1 |   0 |... | 
|7   |   26.177 |   614 |   0 |   0 |... | 
|8   |   21.959 |   517 |   1 |   0 |... | 
|9   |   10.759 |   227 |   1 |   0 |... | 
|10   |   35.458 |  2035 |   0 |   0 |... | 
-------------------------------------------------------------------------------- 

Я хочу, чтобы получить имена столбцов с помощью запроса. Поэтому я могу получить что-то вроде этого. В настоящий момент формат не имеет большого значения.

[analytic_uid, total_playtime, total_frame, total_score, layer1_score ...]

+0

@a_horse_with_no_name сделал исправление, с радостью добавил бы что-нибудь еще, что необходимо для ответа. Благодаря! –

+0

Это не может быть сделано с помощью SQL, только на вашем языке программирования, который запускает инструкцию SQL. –

ответ

2

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

select column_name from 
    information_schema.columns 
    where 
    (select table1, table2) as inner_joined_table; 
+1

'где (выберите table1, table2), поскольку inner_joined_table' не является допустимым выражением SQL –

+0

Ваш ответ дал мне направление, я слишком усложнял себя. Я мог бы просто 'выбрать column_name из INFORMATION_SCHEMA.COLUMNS где table_name = "аналитическая" или table_name = "session_analytic" или table_name = "title_session";' –

+0

тогда, вы должны поместить 'distinct' ключевое слово в запросе, поэтому вы можете получить разные имена столбцов. –

Смежные вопросы