mysql 为什么此查询返回值?[已关闭]

xtfmy6hx  于 2023-01-29  发布在  Mysql
关注(0)|答案(2)|浏览(173)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

2天前关闭。
Improve this question
我开始学习SQL,我有一个问题。我正在运行以下查询:

SELECT ProductName 
FROM Products
WHERE ProductID =ALL (
       SELECT ProductID 
       FROM OrderDetails 
       WHERE Quantity < 0
)
order by ProductID;

如果我查找小于零的数量,为什么此查询返回值?在OrderDetails表中,没有小于零的数量。因此,此查询的输出不应该为空吗?我是否遗漏了某些内容。
w3schools SQL Practice

fwzugrvs

fwzugrvs1#

如果子查询具有始终为false的WHERE子句,则子查询将返回空结果。
https://dev.mysql.com/doc/refman/8.0/en/all-subqueries.html表示:
最后,如果表t2为空,则表达式为TRUE。因此,当表t2为空时,以下表达式为TRUE:

SELECT * FROM t1 WHERE 1 > ALL (SELECT s1 FROM t2);

演示:https://dbfiddle.uk/zCO71Q15
ALL predicate 意味着如果子查询中至少有一行导致比较结果为false,则该 predicate 为false。
但是如果子查询返回0行,那么当然就不可能有任何行导致 predicate 为false。

2admgd59

2admgd592#

有没有写得更清楚些

SELECT p.* 
FROM Products p
WHERE EXISTS (
    SELECT NULL 
    FROM OrderDetails o
    WHERE o.ProductID = p.ProductId
        AND o.Quantity = 10
 );

即,查找所有产品,其中订单已被放置为正好10个。

相关问题