【发布时间】:2023-03-15 05:57:02
【问题描述】:
使用 HAVING 子句而不提及 group by 中的属性是否正确? 例如:
select ncl
from commande c, ligne_commande lc
where c.nc = lc.nc
group by ncl
having count(nart) = ...
nart 属性未在 group by 中定义
【问题讨论】:
-
我在 oracle 下工作。根据我从课程中了解到的情况,group by 子句将在 having 子句之前运行;所以分组然后从主表中提取 NCL 列并将其分组,那么如何对组中不存在的 NART 列的值进行一些过滤?
-
你没有按
nart分组,所以它自然不应该在分组中;更重要的是使用30-year old join syntax -
select子句的属性必须在group by子句中指定;我发现这是合乎逻辑的,另一方面,基于相同的原则,我认为 group by 子句将创建一个具有单个列的虚拟表,在我们的示例 NCL 中,之后,将对包含的值应用过滤在唯一的列 NCL 中,跟随 groupby 的 HAVING 不会引用数据库中的主表,但它只会在 group by 子句定义的虚拟表上起作用......我想这是我的想法不正确:(
-
它不是过滤 NART 的值,而是过滤该列上聚合函数的值。