gpt4 book ai didi

sql - 如何在 SELECT a.*, b.* 中自动重命名列名以具有 ie。结果列名称中的前缀 a_ 和 b_?

转载 作者:行者123 更新时间:2023-12-03 16:36:05 24 4
gpt4 key购买 nike

我有两个表 (a,b),或将表连接到自身,具有相同的列名。 (表很宽,大约有一百列。)

使用:

SELECT a.*, b.*
FROM a LEFT JOIN b ON b.id=a.id AND b.date1=a.date2;

... 有效,但现在如果我想从中查看:
CREATE OR REPLACE VIEW v_test_ab AS
SELECT a.*, b.*
FROM a LEFT JOIN b ON b.id=a.id AND b.date1=a.date2;

...它无法创建 View ,因为会有多个具有相同名称的列。

在 PostgreSQL 中,有没有办法使用给定的模式自动重命名结果表的列名?

示例如下:
CREATE OR REPLACE VIEW v_test_ab AS
SELECT a.* AS a_*, b.* AS b_*
FROM a LEFT JOIN b ON b.id=a.id AND b.date1=a.date2;

或者可能是这样的:
SELECT a.* AS generate_column_names('a_%', a.*)
, b.* AS generate_column_names('b_%', b.*)

避免需要写:
CREATE OR REPLACE VIEW v_test_ab AS
SELECT
a.id as a_id, a.date1 as a_date1, a.date2 as a_date2 -- and so on
, b.id as b_id, b.date1 as b_date1, b.date2 as b_date2 -- and so on
FROM a LEFT JOIN b ON b.id=a.id AND b.date1=a.date2;

我当然可以在 IDE 编辑器中使用模式匹配搜索和替换,但最终结果看起来很臃肿。 (我拥有的真实世界案例有四个具有许多相同列名的宽源表。)

最佳答案

虽然可以将创建查询包装在 execute 中语句,加入目录来获取表名和列名,阅读起来会很困难。

相反,最简单快捷的方法是自动构建列列表并将其复制粘贴到您的查询中。

作为奖励,当有人要求重命名/更改/删除特定列的那一天,就会有其使用情况的书面记录。

SELECT table_name || '.' || column_name || ' as a_' || column_name || ', ' 
FROM information_schema.columns
WHERE table_schema = 'my_schema'
AND table_name= 'my_tablename';

?column?
-------------------------
my_tablename.id as a_id,
my_tablename.title as a_title,
my_tablename.a as a_a,

关于sql - 如何在 SELECT a.*, b.* 中自动重命名列名以具有 ie。结果列名称中的前缀 a_ 和 b_?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60850430/

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