【问题标题】:View Join Two Tables查看连接两个表
【发布时间】:2020-11-21 18:33:34
【问题描述】:

我正在尝试在 postgresql 上创建此视图,但出现以下错误:

创建一个名为:FacultyCourses 的视图:使用 Faculty_id 连接 Faculties、Course 表并显示以下变量的值:faculty_id、name (Faculties)、level (Faculties)、course_id、description (Courses)、level (Courses )。

CREATE VIEW FacultyCourses AS
SELECT faculty_id, name, level, course_id, description,level
FROM faculties, courses;

SELECT * FROM FacultyCourses;

错误: 错误:列引用“级别”不明确 第 2 行:选择教师 ID、姓名、级别、课程 ID、描述、级别 ^ SQL 状态:42702 字符:56

谢谢大家。

【问题讨论】:

  • 从不FROM 子句中使用逗号。 始终使用正确、明确、标准、可读的JOIN语法。
  • 我同意,但遗憾地认为我们打的是一场失败的战斗。至少只要 Postgres(和 Oracle)文档几乎只关注表语法列表并且几乎没有提及 标准 连接语法。

标签: sql postgresql inner-join


【解决方案1】:

level 列不明确,因为它存在于两个表中:使用它所属的表来限定它 - 以及所有其他列(这是最佳实践)。

此外,您的查询显然需要表之间的连接条件。

所以:

create view facultycourses as
select faculty_id, f.name, f.level, c.course_id, c.description, c.level
from faculties f
inner join courses c using (facility_id);

用于连接的 using() 子句明确解析列名 - 因此在 select 子句中没有必要为其添加前缀。

【讨论】:

  • 谢谢。我收到一个新错误:错误:USING 子句中指定的列“faculty_id”在右表 SQL 状态中不存在:42703
  • @Nick_Nick:您的问题提到此列可用于连接表格。如果不是这种情况,那么您需要弄清楚应该使用哪些列。
猜你喜欢
  • 1970-01-01
  • 2023-04-09
  • 2014-11-07
  • 2016-05-27
  • 2019-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多