2017-02-13 49 views
0

我在我的浏览器中对数据库查询进行了一些更改时,手动指定了列名称。然后,我希望这个过程是通用的,所以我决定对列名进行查询。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

'其中 (select table1,table2)as inner_joined_table'不是一个有效的SQL表达式 –

+0

您的回答给了我一个方向,我让自己太复杂了。从 INFORMATION_SCHEMA.COLUMNS 我可能只是 '选择列名在表格名= “分析” 或table_name的= “session_analytic” 或table_name的= “title_session”;' –

+0

然后,你必须把'distinct'关键字查询,所以你可以得到不同的列名。 –