sql 中的 Any 关键字是否在子查询中使用时给出不同的记录
Does Any keyword in sql gives distinct records when used in a subquery
我在教程网站上查看了“任何”的查询,如下所示:
SELECT ProductName
FROM Products
WHERE ProductID = ANY (SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10);
此查询返回 31 行且没有重复项。
在此之后,我尝试使用联接应用相同的查询,但我无法从上述查询中获得结果。
我使用的连接查询:
SELECT Products.ProductName
FROM Products
LEFT JOIN OrderDetails ON Products.ProductID = OrderDetails.ProductID
WHERE OrderDetails.Quantity = 10
ORDER BY Products.ProductName;
这将返回 44 行,并且包含重复项。
在这个与 ProductName
的连接查询中使用 DISTINCT
之后,我得到了想要的结果。
因此我想知道 - “ANY”子句会产生不同的记录吗?
PS:同样的记录出现在内部连接的两个连接查询中(有和没有不同的)。
A join
是与 any
(或类似的 all
)完全不同的操作。
any
是逻辑运算符,在您的示例中用于确定是否应返回 Products
中的每一行。
如果 any
运算符的布尔结果对于每个 ProductId
都是 true
,则可以返回的最多行数等于 Products
中的行数.
通过连接表,比较 join
运算符的两个输入并输出匹配的行,这意味着如果单个 productId
从 Products
输入并且输入来自 Orderdetails
的两行具有相同的 ProductId
值,即 Quantity=10
结果是输出 2 行,每个匹配行输出 1 行。
Hence I want to know - does "ANY" clause produce distinct records?
没有。实际上恰恰相反。被选择的记录是 FROM
子句中的记录。因此,在第一个查询中,Products
中没有重复项。 WHERE
子句永远不会生成重复记录。这不是特别是 ANY
的 属性; IN
和 EXISTS
以及任何其他比较操作也是如此。
相反的是 JOIN
确实会产生重复记录。这就是您在第二个查询中看到的。 table OrderDetails
有多个给定产品的行。
请注意 ANY
(和 IN
)确实实现了一种称为 半连接 的 JOIN
。因此,这些运算符的作用与 FROM
子句中的 JOIN
之间存在关系。但是,半连接和反连接不同于 FROM
子句中定义的内连接和外连接。
我在教程网站上查看了“任何”的查询,如下所示:
SELECT ProductName
FROM Products
WHERE ProductID = ANY (SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10);
此查询返回 31 行且没有重复项。
在此之后,我尝试使用联接应用相同的查询,但我无法从上述查询中获得结果。
我使用的连接查询:
SELECT Products.ProductName
FROM Products
LEFT JOIN OrderDetails ON Products.ProductID = OrderDetails.ProductID
WHERE OrderDetails.Quantity = 10
ORDER BY Products.ProductName;
这将返回 44 行,并且包含重复项。
在这个与 ProductName
的连接查询中使用 DISTINCT
之后,我得到了想要的结果。
因此我想知道 - “ANY”子句会产生不同的记录吗?
PS:同样的记录出现在内部连接的两个连接查询中(有和没有不同的)。
A join
是与 any
(或类似的 all
)完全不同的操作。
any
是逻辑运算符,在您的示例中用于确定是否应返回 Products
中的每一行。
如果 any
运算符的布尔结果对于每个 ProductId
都是 true
,则可以返回的最多行数等于 Products
中的行数.
通过连接表,比较 join
运算符的两个输入并输出匹配的行,这意味着如果单个 productId
从 Products
输入并且输入来自 Orderdetails
的两行具有相同的 ProductId
值,即 Quantity=10
结果是输出 2 行,每个匹配行输出 1 行。
Hence I want to know - does "ANY" clause produce distinct records?
没有。实际上恰恰相反。被选择的记录是 FROM
子句中的记录。因此,在第一个查询中,Products
中没有重复项。 WHERE
子句永远不会生成重复记录。这不是特别是 ANY
的 属性; IN
和 EXISTS
以及任何其他比较操作也是如此。
相反的是 JOIN
确实会产生重复记录。这就是您在第二个查询中看到的。 table OrderDetails
有多个给定产品的行。
请注意 ANY
(和 IN
)确实实现了一种称为 半连接 的 JOIN
。因此,这些运算符的作用与 FROM
子句中的 JOIN
之间存在关系。但是,半连接和反连接不同于 FROM
子句中定义的内连接和外连接。