You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建视图时遇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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 04:53:11