SQL关联子查询无结果问题:为何未返回预期数据?
关联子查询返回0条记录的原因解析
你写的关联子查询之所以返回0条记录,核心问题出在**关联条件p2.ProductID = p1.ProductID**上:
关联子查询的逻辑问题
当你在子查询里加上WHERE p2.ProductID = p1.ProductID时,子查询只会统计当前p1行对应的单个产品的价格平均值。因为每个ProductID是唯一的,单个数值的平均值就是它本身,所以子查询返回的结果等于p1.Price。
此时外层的条件p1.Price > 子查询结果就变成了p1.Price > p1.Price,这个条件永远不成立,自然返回0条记录。
非关联子查询的正确逻辑
你的非关联子查询没有加ProductID的过滤条件,子查询计算的是所有产品的平均价格,外层条件p1.Price > 所有产品均价能正常筛选出价格高于整体均价的产品,所以返回25条结果。
拓展:如果要用关联子查询实现同类需求
如果是想实现类似“价格高于同类别产品均价”这类需要关联的逻辑,关联条件应调整为类别字段而非产品ID,示例如下:
SELECT p1.ProductID, p1.Price FROM PRODUCTS p1 WHERE p1.Price > (SELECT AVG(p2.Price) FROM PRODUCTS p2 WHERE p2.CategoryID = p1.CategoryID);
内容的提问来源于stack exchange,提问作者Doby
相关产品推荐
相关产品推荐

