我想创建一个视图,但是会发生这样的错误:
列“?列?”反复指出
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;
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;
您未选择列,而是在视图中选择了字符串常量。而且字符串常量没有名称,因此Postgres将其命名为“ ?column?
”。
我强烈假设您实际上并不想在视图中使用字符串值'users.createdAt'
,而是希望各个表列的实际content。您需要为此删除单引号。
由于您有多个具有相同名称的列(createdat
,updatedat
),因此需要给它们提供适当的别名:
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;