解決 SQL Server 中的「子查詢傳回多個值」錯誤
比較運算子(如「=」)中使用的 SQL Server 子查詢必須產生單一值。 多個值會觸發錯誤:「子查詢傳回超過 1 個值。」讓我們探索解決方案。
偵錯步驟:
子查詢結果驗證:子查詢應只傳回一行和一列。仔細檢查查詢中是否存在可能產生多個結果的不明確或重複的資料。
連線條件檢查: 確保主查詢和子查詢之間的連接條件建立一對一的關係。刪除多餘或不必要的加入條件。
聚合/分組函數: 如果您的子查詢使用聚合(如SUM
、AVG
、COUNT
)或分組函數,請確認它們的正確應用以及它們產生單一輸出值。
範例與解:
提供的範例示範了一個子查詢傳回多個成本值,從而導致錯誤。 此解決方案使用 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中文網其他相關文章!