首頁 >資料庫 >mysql教程 >如何解決 SQL Server 中的「子查詢傳回超過 1 個值」錯誤?

如何解決 SQL Server 中的「子查詢傳回超過 1 個值」錯誤?

Barbara Streisand
Barbara Streisand原創
2025-01-17 15:21:09427瀏覽

How to Resolve the

解決 SQL Server 中的「子查詢傳回多個值」錯誤

比較運算子(如「=」)中使用的 SQL Server 子查詢必須產生單一值。 多個值會觸發錯誤:「子查詢傳回超過 1 個值。」讓我們探索解決方案。

偵錯步驟:

  1. 子查詢結果驗證:子查詢應只傳回一行和一列。仔細檢查查詢中是否存在可能產生多個結果的不明確或重複的資料。

  2. 連線條件檢查: 確保主查詢和子查詢之間的連接條件建立一對一的關係。刪除多餘或不必要的加入條件。

  3. 聚合/分組函數: 如果您的子查詢使用聚合(如SUMAVGCOUNT)或分組函數,請確認它們的正確應用以及它們產生單一輸出值。

範例與解:

提供的範例示範了一個子查詢傳回多個成本值,從而導致錯誤。 此解決方案使用 TOP 1 將子查詢的輸出限制為單行:

<code class="language-sql">SELECT
    orderdetails.sku,
    orderdetails.mf_item_number,
    orderdetails.qty,
    orderdetails.price,
    supplier.supplierid,
    supplier.suppliername,
    supplier.dropshipfees,
    cost = (SELECT TOP 1 supplier_item.price
           FROM   supplier_item
           WHERE  supplier_item.sku = orderdetails.sku
                  AND supplier_item.supplierid = supplier.supplierid)
FROM   orderdetails
       INNER JOIN supplier ON supplier.supplierid = orderdetails.mfr_id
       INNER JOIN group_master ON group_master.sku = orderdetails.sku  
WHERE  invoiceid = '339740'</code>

使用 TOP 1 保證只回傳一行(因此一個價格),從而解決了錯誤。 請注意,沒有 TOP 1 子句的 ORDER BY 傳回任意行; 如果順序很重要,請考慮加入 ORDER BY 以獲得一致的結果。

以上是如何解決 SQL Server 中的「子查詢傳回超過 1 個值」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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