如何获得结果集中各列的标签,以便在表的名称前加上名称?
我希望对单个表以及联接进行查询。
例子:
SELECT first_name, last_name FROM person;
我希望结果是:
| person.first_name | person.last_name | |-------------------|------------------| | Wendy | Melvoin | | Lisa | Coleman |
我可以使用“ AS”为每列定义一个别名,但这会很乏味。我希望这是自动发生的。
SELECT first_name AS person.first_name, last_name AS person.last_name FROM person;
我提出这个问题的原因是,我使用的数据库驱动程序不提供元数据,该数据通知我从结果集获取其数据的数据库列。我正在尝试编写通用代码来处理结果集。
我想知道一般如何在SQL中执行此操作,或者至少在Postgres中特别如此。
SQLite具有这样的功能,尽管我现在莫名其妙地不推荐使用它。SQLite具有两个编译指示设置:full_column_names和short_column_names。
我知道这个问题有点老了,但也许有人会偶然发现答案,这将对他们有所帮助。
做您要寻找的东西的正确方法是创建和使用视图。是的,一次性输入所有这些新列名称作为别名会有点乏味,但是如果有很多列,则可以使用一种技巧来利用PostgreSQL元数据写出视图文本:
select 'CREATE OR REPLACE VIEW people AS SELECT ' || (select string_agg(column_name || ' AS person_' || column_name, ', ') from information_schema.columns where table_name = 'person' group by table_name) || ' FROM person;';
运行此结果:
?column? ------------------------------------------------------------------------------------------------------------- CREATE OR REPLACE VIEW people AS SELECT last_name AS person_last_name, first_name AS person_first_name FROM person; 1 record(s) selected [Fetch MetaData: 0/ms] [Fetch Data: 0/ms] [Executed: 4/21/12 2:05:21 PM EDT ] [Execution: 9/ms]
然后,您可以复制并执行结果,瞧:
select * from people; person_last_name person_first_name ------------------- -------------------- Melvoin Wendy Coleman Lisa 2 record(s) selected [Fetch MetaData: 1/ms] [Fetch Data: 0/ms]