在w3schools网站上的SQL中使用ALL示例

时间:2019-06-06 14:37:56

标签: sql

我正在学习SQL,现在正在学习w3schools教程。我猜他们在ALL关键字上的示例是不正确的,但可能只是我不理解。就是这样

SELECT ProductName
FROM Products
WHERE ProductID = ALL (SELECT ProductID FROM OrderDetails WHERE Quantity = 10);

此代码的解释是

  

以下SQL语句返回TRUE并列出产品名称,如果   OrderDetails表中的所有记录的数量均为10

据我了解,SELECT向我们返回了所有具有等于10数量的订单的产品ID,因此我们具有ID列表。然后我们应用ALL运算符,但ID不能同时等于所有ID,因此我们得到了一个空列表。这就是我的理解。

我尝试报告他们网站上的错误,但未收到任何答案。 请帮助我理解这一点。

编辑:未指定RDBMS,所以我认为它应该可以正常工作。这是指向示例https://www.w3schools.com/sql/sql_ref_all.asp

的链接

2 个答案:

答案 0 :(得分:2)

您的解释几乎是正确的。而且网站上的解释只是假的。

但是,查询将返回:

  • 如果有一个productnameproductid为10,则为quantity
  • 如果没有productname,数量为10,则所有productid

(这假设ProductIdproducts中是唯一的,这是一个合理的假设。)

Here是一个db <>小提琴,对此进行了说明。

很容易忘记ALL也适用于空列表。因此,任何给定的ProductId都等于空白列表中的所有ProductId-甚至是NULL ProductId

答案 1 :(得分:1)

您的声明在本质上是正确的:

  

SELECT向我们返回订单数量等于的所有产品ID   到10,所以我们有ID列表。然后我们应用ALL运算符但ID   不能同时等于所有ID,所以我们有一个空列表。

第二句话的一个例外是,如果子查询仅返回一行,则ALL是无关紧要的,应该返回一个乘积。

据我所知,本教程中关于该语句的说法是胡说八道,除非有一些我不熟悉的RDBMS对这种语法的处理方式不同(即不正确)。

除了对ALL行为的描述外,语句“以下SQL语句返回TRUE”是无意义的。 SQL语句不返回TRUE或FALSE。他们返回行。