gpt4 book ai didi

sql-server - 当 GROUP BY 包含常量时报告 "Each GROUP BY expression must contain at least one column that is not an outer reference."。为什么?

转载 作者:行者123 更新时间:2023-12-04 13:03:19 25 4
gpt4 key购买 nike

有很多与“每个 GROUP BY 表达式必须包含至少一列不是外部引用”相关的问题。错误,以及在 GROUP BY 中包含一个常量值子句往往是错误的原因。
我实际上是从允许 GROUP BY 中的常量的数据库中转换一些 SQL。条款,所以我想知道两件事:

  • 为什么 MS SQL Server 不允许在 GROUP BY 中使用常量条款?
  • 为什么在 GROUP BY 中放一个常量子句产生此错误,而不是“不要在 GROUP BY 子句中放入常量,白痴。”错误?

  • 这是发生错误的快速示例。以下代码在第三个 SELECT 上爆炸语句,带有不协调的错误消息。
    DECLARE @demo TABLE
    ( groupCol1 int
    , groupCol2 int);

    INSERT INTO @demo VALUES(1,1);
    INSERT INTO @demo VALUES(1,1);
    INSERT INTO @demo VALUES(2,1);
    INSERT INTO @demo VALUES(1,2);
    INSERT INTO @demo VALUES(1,2);
    INSERT INTO @demo VALUES(2,2);
    INSERT INTO @demo VALUES(3,1);
    INSERT INTO @demo VALUES(3,1);
    INSERT INTO @demo VALUES(1,3);
    INSERT INTO @demo VALUES(1,3);

    SELECT * FROM @demo;
    SELECT * FROM @demo GROUP BY groupCol1, groupCol2;
    SELECT *, 'x' FROM @demo GROUP BY groupCol1, groupCol2, 'x';

    最佳答案

    产生错误是因为查询包含逻辑错误。您有一个 GROUP BY所有行都相等的表达式。因此,它不会有意义地将结果集分组。一些数据库系统更能容忍逻辑错误,并会尝试生成结果集。 SQL Server 对此类错误的容忍度不是很高。它希望您真正认真思考并实际告诉它您想要它做什么。

    您可以在 T-SQL 中的许多位置包含常量值 - 但不能在它们不会产生逻辑差异的位置。

    关于sql-server - 当 GROUP BY 包含常量时报告 "Each GROUP BY expression must contain at least one column that is not an outer reference."。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48646415/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com