使用SQL ALL运算符查询无结果问题求助(基于w3schools数据库)
问题分析与解决方案
问题根源
你误用了= ALL运算符的逻辑:= ALL要求左侧的ProductID必须等于子查询返回的每一个值。但Order_Details表中包含多个不同的ProductID,没有任何一个Products表的ProductID能同时匹配所有这些不同的值,因此查询返回空结果。
正确写法
根据你的需求(统计所有在Order_Details中出现过的产品数量),可以用以下几种方式实现:
方式1:使用IN(最直观)
SELECT count(ProductName) FROM Products WHERE ProductID IN (SELECT ProductID FROM Order_Details WHERE Quantity > 0);
方式2:使用EXISTS(性能更优,适合大数据量)
SELECT count(ProductName) FROM Products p WHERE EXISTS (SELECT 1 FROM Order_Details od WHERE od.ProductID = p.ProductID AND od.Quantity > 0);
方式3:使用= ANY(和IN逻辑等价)
SELECT count(ProductName) FROM Products WHERE ProductID = ANY(SELECT ProductID FROM Order_Details WHERE Quantity > 0);
额外优化
你已经确认Order_Details中所有记录的Quantity都大于0,所以子查询里的WHERE Quantity > 0可以直接省略,简化为:
SELECT count(ProductName) FROM Products WHERE ProductID IN (SELECT ProductID FROM Order_Details);
内容的提问来源于stack exchange,提问作者Bala kvp
相关产品推荐
相关产品推荐

