当在子查询中使用MAX()时,“SQL Server子查询返回多于1个值”
我检查了尽可能多的问题,但找不到为什么发生这种情况的答案。当在子查询中使用MAX()时,“SQL Server子查询返回多于1个值”
我有一个查询:
SELECT *
FROM TableA
WHERE Col1 =
(
SELECT MAX(TBC1)
FROM TableB
GROUP BY TBC2
)
这引发错误Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
但是当我改变=
运营商IN
然后愉快地通过。我还注意到,在子查询中使用TOP(1)
也可以解决问题。
从逻辑上看,事实上,在找到MAX
之前,首先会返回一行行,导致SQL中出现错误,即使MAX
只会返回1行?
我只是想了解推理和什么是建立这样的查询的最佳方式。
我认为这是预期的
您正在按TBC2进行分组。在这种情况下,Max(tb1)将返回tbc2中每个不同值的最大值。
假设tbc1是employeeid,tbc2是dept。如果有100条记录,但它包含具有三种类型值(如dept1,dept2,dept3)的TBc2,则上面的查询将返回3个值。
男孩现在感觉像是n00b。我没有考虑到'group by'在技术上会导致多行,即使我通过'where'子句将结果过滤为单行 – Storm
group by
的目的是启用聚合定义的组。您的group by
导致为每个不同的值TCB2
单独归还max
(总计)。
看来你可能已经加入了group by
而不理解它的作用。也许如果你告诉我们想要这样做,我们可以告诉你如何正确地做到这一点。
你有一组。该查询将返回TBC2不同值的一行。删除组。
您正在使用分组查询。这就是为什么它返回多个值。删除组并检查结果 – balaraman