在pgAdmin中通过连接两张表创建新表时出错求助
问题原因
你执行CREATE TABLE时报错的核心原因是:SELECT c.*, g.*会同时把customer表和geography表中的geographykey字段都包含到结果集里,而创建新表时不允许存在重复的列名,因此触发了column "geographykey" specified more than once的错误。
而之前单纯执行查询语句时能成功,是因为查询结果允许临时存在同名列(只是显示时会出现两个相同列名,但数据库可以返回结果),但创建持久化表时要求列名必须唯一。
解决方案
根据你的需求,有两种常见的处理方式:
方式一:只保留一个geographykey字段
因为两个表的geographykey是关联字段,值是一致的,通常只保留其中一个即可:
明确指定字段(推荐,更清晰)
列出geography表中除geographykey外的所有字段,避免重复:CREATE TABLE customer_geo AS SELECT c.*, g.city, g.region, g.country -- 替换成geography表实际需要的字段,排除geographykey FROM customer AS c LEFT JOIN geography AS g ON c.geographykey = g.geographykey;用排除法快速过滤重复字段(仅PostgreSQL支持)
如果不想逐个列出字段,可以用EXCLUDE关键字排除重复的geographykey:CREATE TABLE customer_geo AS SELECT c.*, g.* EXCLUDE (geographykey) FROM customer AS c LEFT JOIN geography AS g ON c.geographykey = g.geographykey;
方式二:保留两个字段但重命名其中一个
如果确实需要保留两个表的geographykey(比如排查关联问题),可以给其中一个字段重命名:
CREATE TABLE customer_geo AS SELECT c.*, g.geographykey AS geo_geographykey, -- 给重复字段起新名字 g.city, g.region, g.country -- 其他需要的字段 FROM customer AS c LEFT JOIN geography AS g ON c.geographykey = g.geographykey;
内容的提问来源于stack exchange,提问作者sowparnika
相关产品推荐
相关产品推荐

