我已经发出了我的sql服务器查询。当我运行这段代码,我得到一个错误:返回了超过1个值的错误
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
我已经尝试了很多方法,但它仍然错误 - 我怎样才能解决呢?
我已经发出了我的sql服务器查询。当我运行这段代码,我得到一个错误:返回了超过1个值的错误
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
我已经尝试了很多方法,但它仍然错误 - 我怎样才能解决呢?
错误非常简单。您的子查询返回多于一行。这是不允许的,因为查询的工作方式。 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'
其实我有很多字段查询buat只有这个领域我得到的错误,我已经编辑了一个完整的查询上面的答案,这个字段查询,除了大胆的查询是好的工作。顺便感谢你的建议 – barrbarry 2013-02-25 13:09:35
@ElyinTrifena可能有超过1个匹配的行。我可能会在子查询中尝试'GROUP BY MR_EMPLOYEE_CHECKROLL_TYPE_ID'(它只会丢弃重复项,所以会“安全地”修复或者可能仍然不起作用)或'JOIN'(对于多行)。否则,您需要真正检查它返回的内容,看看为什么有多个匹配项(最简单的方法就是用'JOIN'来完成)。 – Dukeling 2013-02-25 13:28:41
**(SELECT MR_EMPLOYEE_CHECKROLL_TYPE_ID FROM T_PR_EMPLOYEE_LOG WHERE T_PR_EMPLOYEE_LOG.EMP_ID = T_PR_CHECKROLL_WISE_LOG.EMP_ID)AS CHECKROLL_ID **, 我应该添加** GROUP BY MR_EMPLOYEE_CHECKROLL_TYPE_ID **在选择 如 **(SELECT MR_EMPLOYEE_CHECKROLL_TYPE_ID FROM T_PR_EMPLOYEE_LOG WHERE T_PR_EMPLOYEE_LOG .EMP_ID = T_PR_CHECKROLL_WISE_LOG.EMP_ID GROUP BY MR_EMPLOYEE_CHECKROLL_TYPE_ID)作为CHECKROLL_ID,** 非常感谢您的帮助,这真的帮助我 – barrbarry 2013-02-25 13:53:49
获得完全摆脱了相关子查询的。他们是性能杀手,如果可能的话,不应该用在生产代码中。这只是一种糟糕的编程技术。 – HLGEM 2013-02-25 15:39:17