首頁 > 資料庫 > mysql教程 > 為什麼My SQL子查詢傳回'當子查詢不帶EXISTS引入時,只能在選擇清單中指定一個表達式?”

為什麼My SQL子查詢傳回'當子查詢不帶EXISTS引入時,只能在選擇清單中指定一個表達式?”

Susan Sarandon
發布: 2025-01-11 13:26:42
原創
628 人瀏覽過

Why Does My SQL Subquery Return

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

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