返回了超过1个值的错误

时间:2013-02-25 12:15:25

标签: sql sql-server-2008-r2

我发布了我的sql server查询。当我运行此代码时,出现错误:

  

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

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

1 个答案:

答案 0 :(得分: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'