sql - 多部分标识符无法在 SQL Server 中绑定并混淆
问题描述
我有这个 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
. 我还建议在每列前面加上它所属的表,以消除任何可能的歧义。
最后:您(可能)可以使用窗口函数而不是子查询:
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;
推荐阅读
- android - android.intent.action.VIEW 和 mimeType 在清单中有“缺少 URL”错误
- visual-studio-2017 - 为什么我不能在 Windows 通用应用程序中引用 .Net Core 1.0 程序集?
- amazon-web-services - 单个 t2.micro 可以处理 40 多个用户的 nextcloud 吗?
- ms-access - Access 2016 代码正在插入重复记录
- c - Getopt:与多个 optargs 一起使用的标志
- javascript - 根据时间和创建日期对对象数组进行排序
- java - 在 Android 中使用 NameValuePair 发送长值
- r - 如何在 R Markdown 文档中自动包含文件路径
- javascript - 用于 jquery 的拖放移动响应式图像标记插件
- r - 为什么我一个人得到这个纽约输出?