1

我已经发布了我的 sql server 查询。当我运行这段代码时,我得到一个错误:

子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

我尝试了很多方法,但仍然出错 - 我该如何解决?

4

1 回答 1

4

该错误非常简单。您的子查询返回超过 1 行。由于查询的工作方式,这是不允许的。子句中的事物SELECT不能定义多行,这必须在FROM子句中。

有很多方法可以解决这个问题,其中一些:

SELECT (SELECT MAX(field) ...)
SELECT (SELECT field ... GROUP BY field)
SELECT (SELECT TOP 1 field ...)

问题是以上所有内容GROUP BY(除了可能不起作用的 可能例外)可能会返回不需要的数据 -原始查询中的每一行只有一行

您可能希望使用XML PATH所有这些值连接到一个单元格中。

或者,如果您对多行JOIN感到满意,请改用

SELECT someAlias.field
...
JOIN table as someAlias ON someAlias.somefield = someothertable.someotherfield

如:

SELECT A.MR_EMPLOYEE_CHECKROLL_TYPE_ID
FROM   T_PR_CHECKROLL_WISE_LOG
       JOIN T_TR_CLOSING
         ON T_TR_CLOSING.CLOSING_ID = T_PR_CHECKROLL_WISE_LOG.CLOSING_ID
       JOIN T_PR_EMPLOYEE_LOG
         ON T_PR_EMPLOYEE_LOG.CLOSING_ID = T_TR_CLOSING.CLOSING_ID
       JOIN T_PR_EMPLOYEE_LOG AS A
         ON A.EMP_ID = T_PR_CHECKROLL_WISE_LOG.EMP_ID
WHERE  T_PR_CHECKROLL_WISE_LOG.CLOSING_ID = '1'
于 2013-02-25T12:20:47.250 回答