【问题标题】:what is the difference between 2 similar queries2个相似的查询有什么区别
【发布时间】:2021-09-27 22:36:30
【问题描述】:

我期待相同的输出,但是当我单独运行它们时,得到不同的输出,有人可以解释一下不同之处吗?谢谢!

第一个是:

SELECT * FROM Products
WHERE Price > 20

第二个是:

SELECT * FROM Products
WHERE Price > SOME (SELECT Price FROM Products WHERE Price > 20);

enter image description here

【问题讨论】:

  • 只考虑一行的情况,价格 = 21。
  • “去商店买一条面包。如果他们有鸡蛋,买 6 个”。当被问到为什么我带着 6 条面包回家时,我说“他们有鸡蛋”
  • 写成SELECT * FROM products WHERE price > (SELECT MIN(price) FROM products WHERE price > 20)会不会更清楚?找出大于 20 的最低价格,然后找出所有大于该最低价格的产品? “查找所有价格大于 20 的产品”是不同的
  • 感谢您的 cmets。桌子没有,价格 2021。但是,第一个返回 37 条记录,而第二个返回 35 条记录
  • 好的,那么缺少哪 2 行,它们的价格是多少?另外,花了一段时间才找到它,但是:bradsruminations.blogspot.com/2009/08/… - 为什么我们不使用 ALL/ANY ;)

标签: mysql sql database


【解决方案1】:

第二个查询将排除第一个查询的最小结果。

例如,如果 23 是大于 20 的最低价格,则第二个查询将仅查找价格大于 23 的结果,因此不包括该行(以及价格为 23 的任何其他行)。

【讨论】:

  • 感谢威廉的贡献。但是,查询的输出包括 21.05、21.35 和 21.5 的价格,因此它没有排除第一个查询的最小结果。
  • @MathsandCodes 第一次查询的最小结果是多少?如果我们有重现问题的示例数据,我们可能能够更好地诊断您的问题。如果两个查询的结果集足够小,只需将其添加到您的问题中就会非常有帮助。
  • w3schools.com/sql/… 我在上面的链接中探索了(某些)逻辑运算符。你可以自己探索那里的桌子。关于我的问题,我想我已经得到了答案。第一个查询将返回价格值大于 20 的所有记录。第二个查询将返回价格值比 20 大 2 步的所有记录。因此,它将两次忽略以下价格 20、21。
【解决方案2】:

混淆部分是查询中的一些运算符。

Suppose using greater than ( >) with SOME means 
greater than at least one value.

这就是 some 运算符的工作原理。 为了更好地理解 https://www.w3resource.com/sql/special-operators/sql_some.php

【讨论】:

    【解决方案3】:

    https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_any2&ss=-1

    我想我已经找到了答案。 第一个查询将返回价格值大于 20 的所有记录。 第二个查询将返回价格值比 20 大 2 步的所有记录。因此,它将两次忽略以下价格 20 和 21。

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 2020-03-22
      • 2010-12-19
      • 2017-04-19
      • 1970-01-01
      • 1970-01-01
      • 2013-04-11
      • 2012-04-19
      • 1970-01-01
      相关资源
      最近更新 更多