select 列表中的别名和字段之间的字段名称不明确
Ambiguous field name between an alias and a field in the select list with name
我有一个 SQL 查询 link 许多 table 使用单词 "using" 并且 table 之一出现在每个元素中,错误:
Ambiguous field name between an alias and a field in the select list with the name. ID_DEPARTMENT
如何正确更改查询?请求 link: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))
这是一个初始化计划项目的查询,每个项目都属于它自己的部门,所以我每次都需要添加部门table。
数据库架构:Database schema
我附上数据库文件example
当前版本的火鸟:2.5.7
问题是您重复加入 table departments
而没有使用别名。当您随后在 select 列表中引用 departments.id_department
时,Firebird 不知道它需要使用 departments
的四个实例中的哪一个。
您要么需要更改查询以便只引用 departments
一次,要么如果出于某种原因您需要它(我认为您不需要,如 scaisEdge 的回答所示),您需要为每次出现的 departments
明确指定别名,然后使用正确的别名限定列名。
您有几个不明确的列,第一个出现在 departments
、teachersanddepartments
和 teachers
的嵌套连接中。
但是每次您使用相同的列名来表示不同的 table。你有同样的问题,所以我已经消除了 teachersanddepartments
、subjects
、classrooms
、groups
:
的列歧义
select id_teacher
, fio
, post
, teachersanddepartments.id_department
, teachersanddepartments.name_of_department
, id_subject
, name_of_subject
, specific
, subjects.id_department
, subjects.name_of_department
, id_classroom
, number_of_classroom
, classrooms.specific
, classrooms.id_department
, classrooms.name_of_department
, id_group
, name_of_group
, groups.id_department
, groups.name_of_department
, groups.specifics
, daytime
, pair
, NUMERATOR_DENOMINATOR
, keyy
, typekey
from (
(
(
( classes join teachers using(id_teacher)
join teachersanddepartments using(id_teacher)
join departments ON departments.id_department = teachersanddepartments.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)
)
并且由于您使用的是 INNER JOIN
,因此 JOIN 的 ()
似乎也是不必要和多余的。
使用嵌套连接,您连接 table departments
3 次;没有 ()
嵌套联接,您只需要一个联接:
select id_teacher
, fio
, post
, teachersanddepartments.id_department
, teachersanddepartments.name_of_department
, id_subject
, name_of_subject
, specific
, subjects.id_department
, subjects.name_of_department
, id_classroom
, number_of_classroom
, classrooms.specific
, classrooms.id_department
, classrooms.name_of_department
, id_group
, name_of_group
, groups.id_department
, groups.name_of_department
, groups.specifics
, daytime
, pair
, NUMERATOR_DENOMINATOR
, keyy
, typekey
from classes join teachers using(id_teacher)
join teachersanddepartments using(id_teacher)
join departments ON departments.id_department = teachersanddepartments.id_department
join subjects using (id_subject)
join classrooms using(id_classroom)
join groups using (id_group)
正如 Mark Rotteveel 在正确回答中所建议的,这可能是您出错的原因
我做到了,我为所有部门表添加了别名。谢谢大家!你帮帮我=)
select id_teacher, fio, post, teachersanddepartments.id_department , d1.name_of_department, id_subject, name_of_subject, subjects.specific, subjects.id_department, d2.name_of_department,
id_classroom, number_of_classroom, classrooms.specific, classrooms.id_department, d3.name_of_department, id_group, name_of_group, groups.id_department, d4.name_of_department,
specifics, daytime, pair, NUMERATOR_DENOMINATOR, keyy, typekey
from ((((classes join teachers using(id_teacher) join teachersanddepartments using(id_teacher) join departments d1 on d1.id_department = teachersanddepartments.id_department)
join subjects using (id_subject) join departments d2 on d2.id_department = subjects.id_department)
join classrooms using(id_classroom) join departments d3 on d3.id_department = classrooms.id_department)
join groups using (id_group) join departments d4 on d4.id_department = groups.id_department)
我有一个 SQL 查询 link 许多 table 使用单词 "using" 并且 table 之一出现在每个元素中,错误:
Ambiguous field name between an alias and a field in the select list with the name. ID_DEPARTMENT
如何正确更改查询?请求 link: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))
这是一个初始化计划项目的查询,每个项目都属于它自己的部门,所以我每次都需要添加部门table。 数据库架构:Database schema
我附上数据库文件example 当前版本的火鸟:2.5.7
问题是您重复加入 table departments
而没有使用别名。当您随后在 select 列表中引用 departments.id_department
时,Firebird 不知道它需要使用 departments
的四个实例中的哪一个。
您要么需要更改查询以便只引用 departments
一次,要么如果出于某种原因您需要它(我认为您不需要,如 scaisEdge 的回答所示),您需要为每次出现的 departments
明确指定别名,然后使用正确的别名限定列名。
您有几个不明确的列,第一个出现在 departments
、teachersanddepartments
和 teachers
的嵌套连接中。
但是每次您使用相同的列名来表示不同的 table。你有同样的问题,所以我已经消除了 teachersanddepartments
、subjects
、classrooms
、groups
:
select id_teacher
, fio
, post
, teachersanddepartments.id_department
, teachersanddepartments.name_of_department
, id_subject
, name_of_subject
, specific
, subjects.id_department
, subjects.name_of_department
, id_classroom
, number_of_classroom
, classrooms.specific
, classrooms.id_department
, classrooms.name_of_department
, id_group
, name_of_group
, groups.id_department
, groups.name_of_department
, groups.specifics
, daytime
, pair
, NUMERATOR_DENOMINATOR
, keyy
, typekey
from (
(
(
( classes join teachers using(id_teacher)
join teachersanddepartments using(id_teacher)
join departments ON departments.id_department = teachersanddepartments.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)
)
并且由于您使用的是 INNER JOIN
,因此 JOIN 的 ()
似乎也是不必要和多余的。
使用嵌套连接,您连接 table departments
3 次;没有 ()
嵌套联接,您只需要一个联接:
select id_teacher
, fio
, post
, teachersanddepartments.id_department
, teachersanddepartments.name_of_department
, id_subject
, name_of_subject
, specific
, subjects.id_department
, subjects.name_of_department
, id_classroom
, number_of_classroom
, classrooms.specific
, classrooms.id_department
, classrooms.name_of_department
, id_group
, name_of_group
, groups.id_department
, groups.name_of_department
, groups.specifics
, daytime
, pair
, NUMERATOR_DENOMINATOR
, keyy
, typekey
from classes join teachers using(id_teacher)
join teachersanddepartments using(id_teacher)
join departments ON departments.id_department = teachersanddepartments.id_department
join subjects using (id_subject)
join classrooms using(id_classroom)
join groups using (id_group)
正如 Mark Rotteveel 在正确回答中所建议的,这可能是您出错的原因
我做到了,我为所有部门表添加了别名。谢谢大家!你帮帮我=)
select id_teacher, fio, post, teachersanddepartments.id_department , d1.name_of_department, id_subject, name_of_subject, subjects.specific, subjects.id_department, d2.name_of_department,
id_classroom, number_of_classroom, classrooms.specific, classrooms.id_department, d3.name_of_department, id_group, name_of_group, groups.id_department, d4.name_of_department,
specifics, daytime, pair, NUMERATOR_DENOMINATOR, keyy, typekey
from ((((classes join teachers using(id_teacher) join teachersanddepartments using(id_teacher) join departments d1 on d1.id_department = teachersanddepartments.id_department)
join subjects using (id_subject) join departments d2 on d2.id_department = subjects.id_department)
join classrooms using(id_classroom) join departments d3 on d3.id_department = classrooms.id_department)
join groups using (id_group) join departments d4 on d4.id_department = groups.id_department)