Postgres多表INNER JOIN去重列及建表报错问题咨询
问题原因说明
- 不管是查询结果重复出现
reach_id列,还是建表时报column reach_id specified more than one错误,核心原因都是你用了SELECT *语法:该语法会取出所有关联表的全部字段,你的三张表都带有reach_id字段,最终结果集就会出现多个同名列。 - 普通带
LIMIT的查询允许临时结果集存在同名字段,所以可以正常执行只是显示重复;但建表语句要求表中不能有重复字段名,所以直接报错。
修改方案
你只需要明确指定要查询的字段:主表用别名加*取全部字段,关联表仅取你需要的附加字段即可,不需要带出关联表的reach_id。
调整后的查询语句
SELECT s.*, b.bs_trigger, m.mod_unmod FROM second_schema.q3_studies s INNER JOIN second_schema.bs_trigger_q3 b ON s.reach_id = b.reach_id INNER JOIN second_schema.mod_unmod_q3 m ON s.reach_id = m.reach_id LIMIT 1000;
调整后的建表语句
CREATE TABLE first_schema.report_q3 AS SELECT s.*, b.bs_trigger, m.mod_unmod FROM second_schema.q3_studies s INNER JOIN second_schema.bs_trigger_q3 b ON s.reach_id = b.reach_id INNER JOIN second_schema.mod_unmod_q3 m ON s.reach_id = m.reach_id;
如果后续还要关联其他同规则的表,只要在SELECT字段列表最后加对应关联表别名.附加字段名即可。
内容的提问来源于stack exchange,提问作者gwydion93
相关产品推荐
相关产品推荐

