多部分标识符无法在 SQL 服务器中绑定,它混淆了
The multi-part identifier could not be bound in SQL Server and it confused
我有这个 SQL 查询:
SELECT
stu.sno, sname, cname
FROM
sc scc,
(SELECT AVG(sc.grade) AS avg_grade
FROM sc
GROUP BY sc.cno) AS avg_grades
INNER JOIN
course c ON c.cno = scc.cno
INNER JOIN
s stu ON stu.sno = scc.sno;
并且出现无法绑定多部分标识符scc.cno
的错误。我很困惑 - 有人可以帮助我吗?
不要混用隐式和显式联接!事实上,不要使用隐式连接:这是过时的语法,不应出现在新代码中。
FROM
子句中的逗号应该(可能)是 CROSS JOIN
:
SELECT stu.sno, sname, cname
FROM sc scc
CROSS JOIN (SELECT AVG(sc.grade) AS avg_grade FROM sc GROUP BY sc.cno) AS avg_grades
INNER JOIN course c on c.cno = scc.cno
INNER JOIN s stu on stu.sno = scc.sno;
请注意,要使此子查询有用,您可能需要 select
列 avg_grade
。我还建议在每一列前加上它所属的 table 前缀,以消除任何可能的歧义。
最后:您(可能)可以使用 window 函数而不是子查询:
SELECT stu.sno, sname, cname, scc.
FROM (SELECT *, AVG(grade) OVER() avg_grade FROM sc) scc
INNER JOIN course c on c.cno = scc.cno
INNER JOIN s stu on stu.sno = scc.sno;
假设 one-to-many 加入 students 和 courses 并加入 table 学生课程(即, sc
),考虑对已连接的 table 进行简化聚合。如果查询包含的内容超过 table:
,请务必始终使用别名限定列
SELECT
s.sno AS student_number
, s.sname AS student_name
, c.cname AS course_name
, AVG(sc.grade) AS avg_grade
FROM
sc
INNER JOIN
course c ON c.cno = sc.cno
INNER JOIN
stu s ON s.sno = sc.sno
GROUP BY
s.sno
, s.sname
, c.cname
我有这个 SQL 查询:
SELECT
stu.sno, sname, cname
FROM
sc scc,
(SELECT AVG(sc.grade) AS avg_grade
FROM sc
GROUP BY sc.cno) AS avg_grades
INNER JOIN
course c ON c.cno = scc.cno
INNER JOIN
s stu ON stu.sno = scc.sno;
并且出现无法绑定多部分标识符scc.cno
的错误。我很困惑 - 有人可以帮助我吗?
不要混用隐式和显式联接!事实上,不要使用隐式连接:这是过时的语法,不应出现在新代码中。
FROM
子句中的逗号应该(可能)是 CROSS JOIN
:
SELECT stu.sno, sname, cname
FROM sc scc
CROSS JOIN (SELECT AVG(sc.grade) AS avg_grade FROM sc GROUP BY sc.cno) AS avg_grades
INNER JOIN course c on c.cno = scc.cno
INNER JOIN s stu on stu.sno = scc.sno;
请注意,要使此子查询有用,您可能需要 select
列 avg_grade
。我还建议在每一列前加上它所属的 table 前缀,以消除任何可能的歧义。
最后:您(可能)可以使用 window 函数而不是子查询:
SELECT stu.sno, sname, cname, scc.
FROM (SELECT *, AVG(grade) OVER() avg_grade FROM sc) scc
INNER JOIN course c on c.cno = scc.cno
INNER JOIN s stu on stu.sno = scc.sno;
假设 one-to-many 加入 students 和 courses 并加入 table 学生课程(即, sc
),考虑对已连接的 table 进行简化聚合。如果查询包含的内容超过 table:
SELECT
s.sno AS student_number
, s.sname AS student_name
, c.cname AS course_name
, AVG(sc.grade) AS avg_grade
FROM
sc
INNER JOIN
course c ON c.cno = sc.cno
INNER JOIN
stu s ON s.sno = sc.sno
GROUP BY
s.sno
, s.sname
, c.cname