【发布时间】:2018-09-08 14:27:51
【问题描述】:
我有一个 SQL 查询来使用单词“using”链接许多表,并且其中一个表出现在每个元素中,错误:
别名和选择列表中具有该名称的字段之间的字段名称不明确。 ID_DEPARTMENT
如何正确更改查询?申请链接:https://pastebin.com/t2rqMAut
select id_teacher, fio, post, teachersanddepartments.id_department,
name_of_department, id_subject, name_of_subject, specific,
subjects.id_department, name_of_department,
id_classroom, number_of_classroom, specific,
classrooms.id_department, name_of_department, id_group,
name_of_group, groups.id_department, name_of_department,
specifics, daytime, pair, NUMERATOR_DENOMINATOR, keyy, typekey
from ((((classes join teachers using(id_teacher) join teachersanddepartments
using(id_teacher) join departments using(id_department))
join subjects using (id_subject) join departments using(id_department))
join classrooms using(id_classroom) join departments using(id_department))
join groups using (id_group) join departments using(id_department))
这是一个初始化计划项目的查询,每个项目都属于自己的部门,所以我每次都需要添加部门表。 数据库架构:Database schema
我附上数据库文件example 当前版本的火鸟:2.5.7
【问题讨论】:
-
您可能需要在引用该字段的所有其他位置指定您正在使用哪个表的
id_department字段(就像您在顶部使用teachersanddepartments.id_department一样)。 -
能否将您的查询减少到重现此问题所需的最低限度,并提供必要的 DDL。检查minimal reproducible example 以获取信息。我猜这是 Firebird 不知道选择哪个表来连接的结果。您可能需要明确指定
on <table1>.id_department = <table2>.id_department而不仅仅是using(id_department) -
我测试了这个理论,并通过一个简单的查询似乎并非如此,所以有一个简单的可重现示例进行实验会非常有帮助。
-
我编辑了我的问题,添加了一些信息。我尝试提出建议的选项,它不起作用,错误仍然存在。
标签: sql firebird firebird2.5