我尽可能多地检查了一些问题,但是为什么会发生这种情况却找不到答案。
我有一个问题:
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行?< / p>
我只是想了解推理以及构建此类查询的最佳方法是什么。
答案 0 :(得分:1)
你有一个小组。该查询将为每个不同的TBC2值返回一行。删除组。
答案 1 :(得分:1)
我认为这是预期的
您正在通过TBC2进行分组。在这种情况下,Max(tb1)将返回tbc2中每个不同值的最大值。
假设tbc1是employeeid,tbc2是dept。如果有100条记录,但它包含TBc2有三种类型的值,如dept1,dept2,dept3,那么上面的查询将返回3个值。
答案 2 :(得分:0)
group by
的目的是在已定义的组上启用聚合。您的group by
会导致max
的每个不同值返回单独的TCB2
(聚合)。
好像你可能在没有理解它的作用的情况下添加了group by
。也许如果你告诉我们你尝试做什么,我们可以告诉你如何正确地做到这一点。