当前位置: 首页 > 面试题库 >

在SQL中将表名放在结果集中的每一列之前?(特别是Postgres)

琴镜
2023-03-14
问题内容

如何获得结果集中各列的标签,以便在表的名称前加上名称?

我希望对单个表以及联接进行查询。

例子:

  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]


 类似资料:
  • 问题内容: 我正在使用一个框架(Jodd),该框架将表别名添加到SQL Select的列名称中。它看起来像格式正确的SQL,但Postgres对此感到窒息。 给出一个错误: 有没有办法让Postgres接受该SQL?我的另一种选择是破解框架,我不想这么做。 问题答案: 问题是您在列中的子句中包含了表别名。请参阅Postgres docs中的文档 : 中的列名称 。如果需要,可以使用子字段名称或数组

  • 问题内容: 我有几个要查询的带有复合主键的sql视图,由于Hibernate使得使用复合键很麻烦,因此我正在使用。问题在于此方法只能返回一个List,而我需要通过其索引来引用列。 我有什么机会可以做类似jdbc的事情,并通过其sql名称而不是其索引来引用这些列? 问题答案: 从代码中可以看出,列表包含代表每一行的Map对象。每个Map对象将具有列名作为键,并将值作为值。 注意:这适用于SQLQue

  • 我有SQL查询,结果是多行多列。 我想执行此查询并将结果放入

  • 问题内容: 我有一个如下查询 如果可以使用HQL,则可以使用HQL构造函数语法直接用结果集填充DTO。但是,由于hibernate状态不允许在没有关联的情况下进行左联接,因此我必须使用本机SQL查询。 目前,我正在遍历JDBC样式的结果集并填充DTO对象。有没有更简单的方法来实现它? 问题答案: 您也许可以使用结果转换器。引用Hibernate3.2:HQL和SQL的变压器: SQL变形金刚 使用

  • 我如何用JOOQ表示以下PostgreSQL语法? Jooq的函数需要类型作为其参数,但是函数返回类型?

  • 问题内容: 当我尝试在java类中执行上述查询时,出现如下 异常 。这是orderedProduct(orderedZnAlProduct)的表格 问题答案: 我看不到查询的执行位置(例如statement.executeQuery()),但是,当光标位置不正确时,通常会发生这种错误。您需要调用类似或移动光标的方法,然后才能获得结果。