SQL - 使用同一个表的外部查询和子查询

问题描述:

我想了解以下简单查询的逻辑:SQL - 使用同一个表的外部查询和子查询

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) 
    ) 

我读过有关子查询,也IV”我一直在寻找一个相关的问题,我还没有找到明确的答案。

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

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

+1

当涉及到性能时,从来没有确定的答案。这可能会根据您的指数,表格大小等而有所不同。运行一个执行计划。 – sagi

这(可怕,可怕,没有好,非常差)查询等效于:

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

如果表之间的关系是1:1或1:N,则理论复杂度为O(n)的。
实际的复杂性是依赖于数据库/数据结构/统计数据。

+0

对!由于它并不是立即显而易见的,因此可能有必要强调max()在原始查询中完全没有用处,因为子查询中的source_code具有一个由t3.source_code in(t1 .code_value)'条件 – Insac

+0

@Insac,但是,然后,整个子查询是没用的...... :-)我真的,真的希望这不是一个真实的代码。 –

+0

我分享你的希望:-) – Insac