You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GROUP BY按object_id分组未报错?不符合SQL规则的技术疑问

为什么你的SQL语句没报错?

1. SQL Server的GROUP BY规则有弹性

官方文档提到的“非聚合表达式列必须包含在GROUP BY列表中”并非绝对刚性规则,当查询优化器能够明确判定SELECT中的表达式完全由GROUP BY的列唯一决定时,会允许这种写法而不触发报错。

2. object_id与OBJECT_NAME(object_id)的依赖关系

在同一数据库范围内,object_id是数据库对象的唯一标识符,每个object_id必然对应唯一的OBJECT_NAME(object_id)结果。尽管对象名可能存在重复(不同架构或数据库下可以有同名对象),但你是按object_id分组,每个分组的object_id唯一,因此对应的对象名是确定且唯一的,优化器能识别这种单向的唯一依赖关系。

3. 系统函数的特殊处理

OBJECT_NAME()是SQL Server内置的系统函数,查询优化器对这类系统函数与系统列的绑定关系有内置认知,明确知道OBJECT_NAME(object_id)的结果完全由输入的object_id决定,因此不会以“SELECT表达式未在GROUP BY中”为由报错。如果换成自定义函数,哪怕逻辑上存在依赖关系,优化器大概率无法识别,仍会触发报错。

内容的提问来源于stack exchange,提问作者user3779002

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 19:37:10