SQL 子查詢在 WHERE IN 子句中的選擇:理解錯誤「當子查詢未以 EXISTS 開頭時,選擇清單中只能指定一個表達式」
在嘗試將子查詢新增至 WHERE IN 子句時,請務必確保子查詢傳回單一欄位以進行比較。錯誤「當子查詢未以 EXISTS 開頭時,選擇清單中只能指定一個表達式」表示您的子查詢傳回多列。
為了修正這個問題,讓我們檢查給定的查詢:
<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>
括號內的子查詢傳回兩個欄位:A_ID 和 ud(每個 A_ID 的不同 dNum 值的計數)。但是,WHERE IN 子句期望單一欄位來與 A_ID 進行比較。因此,我們需要修改子查詢以僅傳回 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,可用於在 WHERE IN 子句中進行比較。此外,我們可以刪除 COUNT(DISTINCT dNum) AS ud 子句,因為它不再需要只選擇前 0.1% 的 A_ID 值。
此修改後的查詢應解決指定的錯誤並允許您檢索所需的結果。請記住,在 WHERE IN 子句中使用子查詢時,請確保子查詢僅傳回比較所需的欄位。
以上是為什麼 WHERE IN 子句中的 My SQL 子查詢會傳回「選擇清單中只能指定一個表達式」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!