Обсуждение: OUTER joins

Поиск
Список
Период
Сортировка

OUTER joins

От
Bruce Momjian
Дата:
How do you propose doing outer joins in non-mergejoin situations?
Mergejoins can only be used currently in equal joins.

--  Bruce Momjian                        |  http://www.op.net/~candle maillist@candle.pha.pa.us            |  (610)
853-3000+  If your life is a hard drive,     |  830 Blythe Avenue +  Christ can be your backup.        |  Drexel Hill,
Pennsylvania19026
 


Re: [HACKERS] OUTER joins

От
Bruce Momjian
Дата:
> 
> How do you propose doing outer joins in non-mergejoin situations?
> Mergejoins can only be used currently in equal joins.

Is your solution going to be to make sure the OUTER table is always a
MergeJoin, or on the outside of a join loop?  That could work.

That could get tricky if the table is joined to _two_ other tables. 
With the cleaned-up optimizer, we can disable non-merge joins in certain
circumstances, and prevent OUTER tables from being inner in the others. 
Is that the plan?

--  Bruce Momjian                        |  http://www.op.net/~candle maillist@candle.pha.pa.us            |  (610)
853-3000+  If your life is a hard drive,     |  830 Blythe Avenue +  Christ can be your backup.        |  Drexel Hill,
Pennsylvania19026
 


Re: OUTER joins

От
"Thomas G. Lockhart"
Дата:
(back from a short vacation...)

> How do you propose doing outer joins in non-mergejoin situations?
> Mergejoins can only be used currently in equal joins.

Hadn't thought about it, other than figuring that implementing the
equi-join first was a good start. There is a class of outer join syntax
(the USING clause) which is implicitly an equi-join...
                       - Tom


Re: OUTER joins

От
Bruce Momjian
Дата:
> (back from a short vacation...)
> 
> > How do you propose doing outer joins in non-mergejoin situations?
> > Mergejoins can only be used currently in equal joins.
> 
> Hadn't thought about it, other than figuring that implementing the
> equi-join first was a good start. There is a class of outer join syntax
> (the USING clause) which is implicitly an equi-join...

Not that easy.  You don't automatically get a mergejoin from an
equijoin.  I will have to force outer's to be either mergejoins, or
inners of non-merge joins.  Can you add code to non-merge joins in the
executor to throw out a null row if it does not find an inner match for
the outer row, and I will handle the optimizer so it doesn't throw a
non-conforming plan to the executor.

--  Bruce Momjian                        |  http://www.op.net/~candle maillist@candle.pha.pa.us            |  (610)
853-3000+  If your life is a hard drive,     |  830 Blythe Avenue +  Christ can be your backup.        |  Drexel Hill,
Pennsylvania19026
 


Re: OUTER joins

От
"Thomas G. Lockhart"
Дата:
> > Hadn't thought about it, other than figuring that implementing the
> > equi-join first was a good start. There is a class of outer join 
> > syntax (the USING clause) which is implicitly an equi-join...
> Not that easy.  You don't automatically get a mergejoin from an
> equijoin.  I will have to force outer's to be either mergejoins, or
> inners of non-merge joins.  Can you add code to non-merge joins in the
> executor to throw out a null row if it does not find an inner match 
> for the outer row, and I will handle the optimizer so it doesn't throw 
> a non-conforming plan to the executor.

So far I don't have enough info in the parser to get the
planner/optimizer going. Should we work from the front to the back, or
should I go ahead and look at the non-merge joins? It's painfully
obvious that I don't know anything about the middle parts of this to
proceed without lots more research.
                       - Tom


Re: OUTER joins

От
Bruce Momjian
Дата:
> > > Hadn't thought about it, other than figuring that implementing the
> > > equi-join first was a good start. There is a class of outer join 
> > > syntax (the USING clause) which is implicitly an equi-join...
> > Not that easy.  You don't automatically get a mergejoin from an
> > equijoin.  I will have to force outer's to be either mergejoins, or
> > inners of non-merge joins.  Can you add code to non-merge joins in the
> > executor to throw out a null row if it does not find an inner match 
> > for the outer row, and I will handle the optimizer so it doesn't throw 
> > a non-conforming plan to the executor.
> 
> So far I don't have enough info in the parser to get the
> planner/optimizer going. Should we work from the front to the back, or
> should I go ahead and look at the non-merge joins? It's painfully
> obvious that I don't know anything about the middle parts of this to
> proceed without lots more research.

We need to do phone or IRC to discuss this. Let me know when.

--  Bruce Momjian                        |  http://www.op.net/~candle maillist@candle.pha.pa.us            |  (610)
853-3000+  If your life is a hard drive,     |  830 Blythe Avenue +  Christ can be your backup.        |  Drexel Hill,
Pennsylvania19026