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

关于SELECT(SELECT SUM(t.val)) FROM mytable t的SQL规范合规性及执行逻辑问询

SQL查询结果疑问解答

结果是否符合SQL规范?对应哪一章节?

这个结果完全符合SQL规范(注:若实际执行后返回4行6是标准行为;若仅返回1行6,属于数据库引擎的合理优化,未违反规范)。在SQL:2016及后续版本的《SQL/Foundation》(第7章)中,明确了标量子查询的定义与执行规则:标量子查询要求返回单个值(一行一列),无关联的标量子查询仅会被数据库单次求值,不需要逐行执行。

为什么子查询没有针对表中每条记录执行?

你写的子查询(SELECT SUM(t.val)) FROM mytable t是无关联标量子查询——它既没有引用外层查询的任何字段,也没和外层表建立关联关系(子查询里的t是自己的局部别名,和外层的t完全没关系)。按照SQL规范,这种子查询只会跑一次,算出整个mytable里val的总和(1+2+3+NULL=6,SUM函数会自动忽略NULL值),不会针对外层表的每一行重复计算。

为什么没返回包含1、2、3、NULL的多行结果?

你想要的是直接取出每行的val值,但当前SQL的逻辑根本不是做这个的。如果要得到你预期的结果,直接写SELECT val FROM mytable;就行。而你现在的SQL,是从mytable的每一行里输出子查询算出的总和,所以正常会返回4行6,而不是每行的原始val值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:30:16