多表查询求助:筛选priceeach<100的SQL结果不符合预期
SQL查询结果不符合预期的问题排查与修复
你的SQL逻辑存在漏洞:子查询仅筛选出存在至少一条priceeach<100记录的productcode,但当通过该productcode关联orderdetails表时,会返回该产品的所有订单明细——哪怕其中包含priceeach>=100的记录,这就是结果出现不符合条件数据的原因。
修复方案1:直接过滤(最简洁高效)
直接在关联后通过WHERE子句过滤当前明细的priceeach,确保只返回符合条件的记录:
select p.productcode, p.productname, p.msrp, od.priceeach from products as p join orderdetails as od on p.productcode = od.productcode where od.priceeach < 100
修复方案2:关联子查询(仅作逻辑演示,不推荐)
如果一定要基于子查询逻辑调整,可改成关联子查询,确保每条返回的明细自身满足条件:
select p.productcode, p.productname, p.msrp, od.priceeach from products as p join orderdetails as od on p.productcode = od.productcode where exists ( select 1 from orderdetails od2 where od2.productcode = od.productcode and od2.priceeach = od.priceeach and od2.priceeach < 100 )
注:此写法冗余,方案1的执行效率和可读性更优。
内容的提问来源于stack exchange,提问作者Naru
相关产品推荐
相关产品推荐

