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

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

Susan Sarandon
Susan Sarandon原創
2025-01-11 13:26:42629瀏覽

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn