SQL 子查詢錯誤:「只允許一個表達式」
當 IN
子句中使用的子查詢傳回多列時,會出現此錯誤:「當未使用 EXISTS 引入子查詢時,選擇清單中只能指定一個表達式」。 IN
運算子需要單列結果集來比較。
有問題的查詢:
以下查詢嘗試在 A_ID
子句中使用傳回 ud
和計數 (IN
) 的子查詢:
<code class="language-sql">select count(distinct dNum) from myDB.dbo.AQ where A_ID in (SELECT DISTINCT TOP (0.1) PERCENT A_ID, COUNT(DISTINCT dNum) AS ud FROM myDB.dbo.AQ WHERE M > 1 and B = 0 GROUP BY A_ID ORDER BY ud DESC)</code>
根本原因:
內部 SELECT
語句傳回兩個欄位:A_ID
和 ud
。 IN
運算子無法處理此問題;它需要單一欄位來與外部查詢中的 A_ID
欄位進行比較。
已修正的查詢:
解決方案是修改子查詢以僅傳回 A_ID
列。 可以使用 ORDER BY COUNT(DISTINCT dNum) DESC
:
<code class="language-sql">select count(distinct dNum) from myDB.dbo.AQ where A_ID in (SELECT DISTINCT TOP (0.1) PERCENT A_ID FROM myDB.dbo.AQ WHERE M > 1 and B = 0 GROUP BY A_ID ORDER BY COUNT(DISTINCT dNum) DESC)</code>
此修訂後的查詢根據不同 A_ID
值的計數正確選擇前 10% 的 dNum
值,然後使用這些 A_ID
值來過濾外部查詢。
以上是為什麼我的 SQL 子查詢會產生「僅允許一個表達式」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!