【问题标题】:SQL - using the same table in the outer query and in the sub querySQL - 在外部查询和子查询中使用同一张表
【发布时间】:2016-11-06 08:49:49
【问题描述】:

我正在尝试理解以下简单查询的逻辑:

select *
from table1 as t1 cross join table2 as t2
where t2.source_code = (
    select Max(t3.source_code)
    from table2 t3
    where t3.source_code in (t1.code_value)
    )

我已经阅读了关于子查询的内容,我也一直在寻找与我一样的相关问题,但我还没有找到明确的答案。

我的问题是我如何知道这个查询的复杂性(子查询运行了多少次)。

我不太确定子查询在这里是如何工作的,因为我在子查询中使用来自外部查询的表。

【问题讨论】:

  • 在性能方面从来没有确定的答案。这可能会根据您的索引、表大小等而有所不同。运行执行计划。

标签: sql sql-server subquery


【解决方案1】:

这个(Terrible, Horrible, No Good, Very Bad)查询相当于:

select * from table1 as t1 join table2 as t2 on t1.code_value = t2.source_code;

如果表之间的关系是 1:1 或 1:N,那么理论上的复杂度是 O(n)。
实际的复杂性取决于数据库/数据结构/统计信息。

【讨论】:

  • 对!由于不是很明显,也许最好强调一下 max() 在原始查询中完全没用,因为子查询中的 source_code 有一个由 t3.source_code in (t1.code_value) 条件确定的值
  • @Insac,但是,整个子查询都没用...... :-) 我真的,真的希望这不是真实的代码。
  • 我分享你的希望 :-)
猜你喜欢
  • 1970-01-01
  • 2020-03-31
  • 1970-01-01
  • 2020-11-14
  • 1970-01-01
  • 2017-06-11
  • 1970-01-01
  • 2020-03-08
  • 2019-05-08
相关资源
最近更新 更多