首頁 >資料庫 >mysql教程 >為什麼我的 SQL 子查詢會產生「僅允許一個表達式」錯誤?

為什麼我的 SQL 子查詢會產生「僅允許一個表達式」錯誤?

Patricia Arquette
Patricia Arquette原創
2025-01-11 13:17:42592瀏覽

Why Does My SQL Subquery Produce an

SQL 子查詢錯誤:「只允許一個表達式」

IN 子句中使用的子查詢傳回多列時,會出現此錯誤:「當未使用 EXISTS 引入子查詢時,選擇清單中只能指定一個表達式」。 IN 運算子需要單列結果集來比較。

有問題的查詢:

以下查詢嘗試在 A_ID 子句中使用傳回 ud 和計數 (IN) 的子查詢:

<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>

根本原因:

內部 SELECT 語句傳回兩個欄位:A_IDudIN 運算子無法處理此問題;它需要單一欄位來與外部查詢中的 A_ID 欄位進行比較。

已修正的查詢:

解決方案是修改子查詢以僅傳回 A_ID 列。 可以使用 ORDER BY COUNT(DISTINCT dNum) DESC:

在子查詢內完成按計數排序
<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 值的計數正確選擇前 10% 的 dNum 值,然後使用這些 A_ID 值來過濾外部查詢。

以上是為什麼我的 SQL 子查詢會產生「僅允許一個表達式」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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