【问题标题】:Correlated subquery SQL相关子查询 SQL
【发布时间】:2018-10-10 18:29:50
【问题描述】:

这个作业的问题:查询的结果是什么?

我知道答案,但我不太明白 SQL 查询是如何工作的,尤其是在我用问号标记的行中。

到目前为止,我意识到首先我们join two tables from subquery

SQL 查询:

select Count(*)  
from OrderDetails as OD 
inner join [Order] as O on OD.idOrder = O.id  
where SalePrice = all (select Price  
                       from OrderDetails 
                       inner join [Order] on OrderDetails.idOrder = [Order].id  
                       where idCustomer != O.idCustomer 
                         and OrderDetails.idProduct = OD.idProduct)

【问题讨论】:

  • 什么是数据库引擎?看起来像 SQL Server。
  • 任务中没有指定是哪个数据库引擎。
  • 除了引用标识符和非标准不等于运算符之外,这是标准 SQL。回答问题不需要知道。
  • 在您的示例中,除非您的子查询仅返回 1 条记录,并且您的主查询中存在 SalePrice,否则您将不会返回数据。这是因为运算符在 ALL ('=') 之前。可以在这里找到关于 ALL 的非常好的插图:w3resource.com/sql/special-operators/sql_all.php
  • 提示:不使用图片的原因是here

标签: sql tsql correlated-subquery


【解决方案1】:

作为一个逻辑描述,首先展开连接,因为外部查询和子查询都使用它。

上图中的第一行有idCustomer1idProduct1。子查询正在查找具有相同产品 ID 和不同客户 ID 的所有行。对于第一行,有两行与此组合匹配(两列中都以黄色突出显示)。这些是下面以红色突出显示的Price 列。

外行的SalePrice 列的值为1。这与所有红色突出显示的 Price 值相同(即它们都没有不同的值),因此第一外行满足 = ALL 谓词并有助于计数。

对连接返回的剩余 9 行重复相同的过程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多