SQL执行SELECT时子查询返回多个值报错如何解决
报错原因
你编写的关联子查询会为每个供应商返回其名下所有肉批次的温度值,多个返回值无法直接与单个数值3进行比较,因此触发了该报错。
解决方案
方案1:使用EXISTS子查询(推荐)
该方案性能更优,无需额外去重,只要供应商存在至少一个温度低于3℃的批次就会返回对应邮箱:
SELECT Email FROM Supplier s WHERE EXISTS ( SELECT 1 FROM Batchofmeat b WHERE b.Supplier_ID = s.Supplier_ID AND b.Temperature < 3 );
方案2:使用关联查询+去重
先关联两张表筛选符合温度要求的记录,再通过DISTINCT去掉同一供应商重复的邮箱记录:
SELECT DISTINCT s.Email FROM Supplier s INNER JOIN Batchofmeat b ON s.Supplier_ID = b.Supplier_ID WHERE b.Temperature < 3;
拓展(可选)
如果你需要查询名下所有批次温度都低于3℃的供应商,可以使用ALL条件实现:
SELECT Email FROM Supplier s WHERE 3 > ALL ( SELECT b.Temperature FROM Batchofmeat b WHERE b.Supplier_ID = s.Supplier_ID );
内容的提问来源于stack exchange,提问作者Dani
相关产品推荐
相关产品推荐

