编写非关联子查询遇报错:子查询返回多个值
问题解决:子查询返回多个值的报错处理
报错原因
你使用的=运算符要求右侧子查询必须返回唯一单个值,但你的子查询SELECT ProductID FROM dbo.OrderDetails WHERE Quantity >= 120查询出了多个符合条件的ProductID,因此触发报错。
解决方案
根据你的需求,有两种常用修复方式:
方式一:使用IN匹配多个值(推荐,符合多数场景需求)
如果需要找出所有存在订单详情数量≥120的产品,用IN替代=,它支持匹配子查询返回的多个值:
SELECT ProductName FROM dbo.Products WHERE ProductID IN ( SELECT ProductID FROM dbo.OrderDetails WHERE Quantity >= 120 );
方式二:用聚合函数限制子查询返回单个值
如果只需要匹配子查询中的某一个特定值(比如数量≥120的订单里对应的最大/最小ProductID),可以用聚合函数让子查询返回唯一值:
SELECT ProductName FROM dbo.Products WHERE ProductID = ( SELECT MAX(ProductID) -- 替换为MIN(ProductID)可获取最小ID的产品 FROM dbo.OrderDetails WHERE Quantity >= 120 );
内容的提问来源于stack exchange,提问作者Nathan Murray
相关产品推荐
相关产品推荐

