首页 > 数据库 > 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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板