SQL 子查詢錯誤:SELECT 清單中存在單一表達式
此 SQL 查詢產生錯誤:
<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>
錯誤訊息“當子查詢未使用 EXISTS 引入時,只能在選擇清單中指定一個表達式”,表示子查詢的 SELECT
子句存在問題。 子查詢嘗試傳回兩列:A_ID
和 COUNT(DISTINCT dNum)
。使用 IN
(或其他比較運算符,例如 =
、!=
等)時,子查詢的 SELECT
清單必須只包含單一欄位。
解:
更正後的查詢應僅從子查詢中傳回 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>
注意變化:
SELECT
子句現在只包含 A_ID
。 ORDER BY
子句已移至外部查詢。 這是因為原始的 ORDER BY
試圖在子查詢結果用於 IN
子句之前對其進行排序; 排序應應用於最終結果集。 此修改後的查詢正確選擇了在子查詢結果中找到 dNum
的不同 A_ID
值的計數。 子查詢根據不同 A_ID
的計數有效識別前 10% 的 dNum
值,然後外部查詢對與這些選定 dNum
關聯的不同 A_ID
值進行計數。 最後的 ORDER BY
子句根據不同 dNum
值的計數對結果進行排序。
以上是為什麼My SQL子查詢傳回'當子查詢不帶EXISTS引入時,只能在選擇清單中指定一個表達式?”的詳細內容。更多資訊請關注PHP中文網其他相關文章!