列“?列?”重复表示

问题描述 投票:0回答:2

我想创建一个视图,但是会发生这样的错误:

列“?列?”反复指出

CREATE VIEW v_users AS
    SELECT 
        users.user_id,
        users.full_name,
        users.username,
        users.password,
        roles.role_name,
        roles.role_id,
        users.roles_id,
        'users.createdAt',
        'users.updatedAt',
        'roles.createdAt',
        'roles.updatedAt'
    FROM users
    INNER JOIN roles
    ON users.roles_id = roles.role_id;
sql postgresql sql-view
2个回答
1
投票

createdAt列和updatedAt列可能来自不同的表,但视图中具有相同的名称,因此必须为此提供Alias

尝试以下

CREATE VIEW v_users AS
    SELECT 
        users.user_id,
        users.full_name,
        users.username,
        users.password,
        roles.role_name,
        roles.role_id,
        users.roles_id,
        'users.createdAt' AS UserCreatedAt,
        'users.updatedAt' AS UserUpdatedAt,
        'roles.createdAt' AS RoleCreatedAt,
        'roles.updatedAt' AS RoleUpdatedAt
    FROM users
    INNER JOIN roles
    ON users.roles_id = roles.role_id;

1
投票

您未选择列,而是在视图中选择了字符串常量。而且字符串常量没有名称,因此Postgres将其命名为“ ?column?”。

我强烈假设您实际上并不想在视图中使用字符串值'users.createdAt',而是希望各个表列的实际content。您需要为此删除单引号。

由于您有多个具有相同名称的列(createdatupdatedat),因此需要给它们提供适当的别名:

CREATE VIEW v_users AS
SELECT 
    users.user_id,
    users.full_name,
    users.username,
    users.password,
    roles.role_name,
    roles.role_id,
    users.roles_id,
    users.createdAt as user_created_at,
    users.updatedAt as user_updated_at,
    roles.createdAt as roles_created_at,
    roles.updatedAt as roles_updated_at
FROM users
  INNER JOIN roles
   ON users.roles_id = roles.role_id;
© www.soinside.com 2019 - 2024. All rights reserved.