Army mentioned earlier the analysis he wrote for Derby-781 (Subquery
materialization via
Hash Join).  I've read most of that, and am confused by his analysis
of this select:

Q2. select 1 from tt, (t left outer join (s left outer join r on (f =
i)) on (b = e)) where (j=g)

Judging from the analysis, this query could be less ambiguously expressed as:

select 1
from
   tt as T0,
   (t as T1 left outer join
    (s as T2 left outer join r as T3 on (T2.f = T3.i))
    on (T1.b = T2.e))
where (T0.j=T3.g)

In particular, I don't understand the claim that the subqueries can
not be materialized
because of the fact that the (j=g)  and (b=e) predicates create a
correlation between
the levels.  I can't see any theoretical reason why the following
table expression
couldn't be materialized:

   s as T2 left outer join r as T3 on (T2.f = T3.i)

There is no correlation between this table expression and the rest of
the from clause.
Furthermore, there is no correlation between:

   (t as T1 left outer join (s as T2 left outer join r as T3 on (T2.f
= T3.i)) on (T1.b = T2.e))

And the rest of the from clause (just TT in this case).

My understanding of the semantics of select are that (logically) the
FROM clause is
executed first to produce a working table (in this case a CROSS JOIN
of TT with the
result of the left outer joins, which are evaluated independently of TT).

Army (or anyone else), can you provide a more detailed explanation of this?

Thanks,
James

Reply via email to