gpt4 book ai didi

sql - 将表名添加到 SQL 结果集中的每一列? (特别是 Postgres)

转载 作者:行者123 更新时间:2023-11-29 11:15:20 25 4
gpt4 key购买 nike

如何获取结果集中每一列的标签以在其表的前面加上名称?

我希望这种情况发生在对单个表的查询以及连接时。

例子:

  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 有两个 pragma 设置:full_column_names & short_column_names .

最佳答案

我知道这个问题有点老了,但也许有人会偶然发现答案,这会对他们有所帮助。

完成您正在寻找的事情的正确方法是创建和使用 View 。是的,一次性将所有这些新列名称键入别名会有点乏味,但是如果有很多列,可以使用这里的技巧来利用 PostgreSQL 元数据写出 View 的文本:

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]

关于sql - 将表名添加到 SQL 结果集中的每一列? (特别是 Postgres),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5179648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com