gpt4 book ai didi

sql - 我是否比 SQL Server 更聪明,或者这是有原因的?

转载 作者:行者123 更新时间:2023-12-01 10:51:37 25 4
gpt4 key购买 nike

我有以下表格

CREATE TABLE Foos (
[Id] INT IDENTITY,
-- Other fields
)

CREATE TABLE Boos (
[Id] INT IDENTITY,
[FooId] INT,
-- Other fields
)

我正在尝试执行一个非常简单的查询:

SELECT f.Id, COUNT(*)
FROM Foos f
JOIN Boos b on f.Id = b.FooId
GROUP BY b.FooId

显然,由于 GROUP BY,我收到了一个错误。错误信息是

Column 'Foo.Id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

当我将分组方式更改为 GROUP BY f.Id 时,一切又恢复正常了。

我的问题是,为什么 SQL Server 已经确定 f.Id = b.FooId 来自连接,即 Foo.Id 却抛出该错误在 IDENTITY 中是唯一的,并且由于主键上的连接,分组在逻辑上将返回相同的计数?

最佳答案

SQL Server 无法始终如一地推断此类键关系 - 如果 boos.FooId 可以为空并且您的查询是:

SELECT f.Id, COUNT(*)
FROM Foos f
LEFT JOIN Boos b on f.Id = b.FooId
GROUP BY b.FooId

你有一组记录,其中 b.fooId 为 NULL,f.Id 可以不同。

您还可以加入其他条件,这些条件也可能导致 NULLS 或其他类型的非等价 - 例如你可以这样加入:

SELECT f.Id, COUNT(*)
FROM Foos f
JOIN Boos b on SUBSTRING(f.Id, 2, 4) = SUBSTRING(b.FooId, 2, 4)
GROUP BY b.FooId

所以 - 是的,这可以在一个简单、常见的情况下进行推理,但仅限于那种情况。这会导致不一致,并最终证明让开发人员更加沮丧。

关于sql - 我是否比 SQL Server 更聪明,或者这是有原因的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18846951/

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