我已經發出了我的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