首頁 > 資料庫 > mysql教程 > 為什麼 WHERE IN 子句中的 My SQL 子查詢會傳回「選擇清單中只能指定一個表達式」?

為什麼 WHERE IN 子句中的 My SQL 子查詢會傳回「選擇清單中只能指定一個表達式」?

DDD
發布: 2025-01-11 13:22:41
原創
675 人瀏覽過

Why Does My SQL Subquery in a WHERE IN Clause Return

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板