创建视图时遇ERROR: column 'id' specified more than once错误求助
解决视图创建时“column 'id' specified more than once”错误
问题描述
我编写的以下SQL代码可正常运行:
SELECT d1.*,d3.* FROM bdir_programmation.d_program AS d1 JOIN ( SELECT d_program.id,MAX(id_reg) AS maxv FROM bdir_programmation.d_program GROUP BY d_program.id) AS d2 ON d1.id=d2.id AND d1.id_reg=d2.maxv JOIN bdir_programmation.d_infra_progra d3 ON d1.id=d3.id;
但尝试创建视图时,出现错误提示:
ERROR: column "id" specified more than once
我曾尝试重命名SELECT列表中的变量但操作有误,希望得到解决帮助。
解决方案
错误原因
d1.*(来自d_program表)和d3.*(来自d_infra_progra表)同时包含名为id的列,而视图要求结果集中所有列名必须唯一,因此创建视图时触发错误。
具体修复方法
避免使用*通配符,明确列出需要的列,并对重复的id列进行重命名,确保列名唯一。示例如下:
SELECT -- 明确列出d1的列,重命名重复的id d1.id AS program_id, d1.id_reg, d1.列名1, -- 替换为d_program表实际需要的列 d1.列名2, -- 明确列出d3的列,重命名重复的id d3.id AS infra_progra_id, d3.列名1, -- 替换为d_infra_progra表实际需要的列 d3.列名2 FROM bdir_programmation.d_program AS d1 JOIN ( SELECT d_program.id,MAX(id_reg) AS maxv FROM bdir_programmation.d_program GROUP BY d_program.id) AS d2 ON d1.id=d2.id AND d1.id_reg=d2.maxv JOIN bdir_programmation.d_infra_progra d3 ON d1.id=d3.id;
如果需要保留两张表的所有列,也可以只重命名其中一个id列,其余列正常列出:
SELECT d1.*, d3.id AS infra_progra_id, d3.列名1, d3.列名2, -- 列出d3表中除id外的所有列 FROM bdir_programmation.d_program AS d1 JOIN ( SELECT d_program.id,MAX(id_reg) AS maxv FROM bdir_programmation.d_program GROUP BY d_program.id) AS d2 ON d1.id=d2.id AND d1.id_reg=d2.maxv JOIN bdir_programmation.d_infra_progra d3 ON d1.id=d3.id;
只要确保最终SELECT结果集中没有重复的列名,就能成功创建视图。
内容的提问来源于stack exchange,提问作者Georges Abitbol
相关产品推荐
相关产品推荐

