追蹤 SQL 子查詢錯誤:「只能指定一個表達式...」
當您的SQL 查詢在IN
子句中使用子查詢並且子查詢嘗試傳回多個列時,會出現此錯誤:「當未使用EXISTS 引入子查詢時,選擇清單中只能指定一個表達式” 。 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
和 COUNT(DISTINCT dNum) AS ud
。 這違反了與 IN
.
已修正的查詢:
解決方案涉及重組子查詢以僅傳回 A_ID
列:
<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
,從而解決了錯誤。 COUNT(DISTINCT dNum)
的排序是在子查詢本身內處理的,確保選擇前 10% 的 A_ID
值(基於 COUNT(DISTINCT dNum)
。
以上是為什麼我的 SQL 子查詢會產生「選擇清單中只能指定一個表達式」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!