我发布了我的sql server查询。当我运行此代码时,出现错误:
子查询返回的值超过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'