首頁 > 資料庫 > mysql教程 > 為什麼 My SQL 子查詢回傳「子查詢傳回超過 1 個值」錯誤?

為什麼 My SQL 子查詢回傳「子查詢傳回超過 1 個值」錯誤?

Linda Hamilton
發布: 2025-01-17 15:06:10
原創
161 人瀏覽過

Why Does My SQL Subquery Return a

SQL Server 子查詢傳回多行:故障排除與解決方案

以下 SQL 查詢舉例說明了一個常見問題:子查詢傳回多個值,從而導致錯誤。

<code class="language-sql">SELECT 
   orderdetails.sku,
   orderdetails.mf_item_number,
   orderdetails.qty,
   orderdetails.price,
   supplier.supplierid,
   supplier.suppliername,
   supplier.dropshipfees,
   cost = (SELECT supplier_item.price
           FROM   supplier_item,
                  orderdetails,
                  supplier
           WHERE  supplier_item.sku = orderdetails.sku
                  AND supplier_item.supplierid = supplier.supplierid)
FROM   orderdetails,
       supplier,
       group_master
WHERE  invoiceid = '339740'
       AND orderdetails.mfr_id = supplier.supplierid
       AND group_master.sku = orderdetails.sku  </code>
登入後複製

執行此查詢會導致錯誤:「子查詢傳回超過1 個值。當子查詢跟在=、!=、、>= 後面或子查詢用作表達式時,這是不允許的.”

問題:多行子查詢結果

出現錯誤是因為子查詢(SELECT supplier_item.price...)可以傳回多個price值。 這是因為 WHERE 子句不能唯一標識每個 supplier_item 記錄的單一 orderdetails 記錄。 以這種方式使用的子查詢需要一個明確的結果。

解決方案:使用 JOIN 進行高效能資料擷取

高效且正確的做法是用明確的JOIN操作替換子查詢:

<code class="language-sql">SELECT
    od.Sku,
    od.mf_item_number,
    od.Qty,
    od.Price,
    s.SupplierId,
    s.SupplierName,
    s.DropShipFees,
    si.Price as cost
FROM
    OrderDetails od
    INNER JOIN Supplier s on s.SupplierId = od.Mfr_ID
    INNER JOIN Group_Master gm on gm.Sku = od.Sku
    INNER JOIN Supplier_Item si on si.SKU = od.Sku and si.SupplierId = s.SupplierID
WHERE
    od.invoiceid = '339740'</code>
登入後複製

此修訂後的查詢使用 INNER JOIN 根據符合的 OrderDetailsSupplier 連接 Group_MasterSupplier_ItemSkuSupplierId 表。這可確保僅組合符合的行,從而防止子查詢傳回多個值。 si.Price 直接選擇為 cost,為每個訂單詳細資訊提供正確的價格。 在這種情況下,這種方法比使用相關子查詢更有效率和可讀性。

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

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