Re: Wacky query plan, why?

Поиск
Список
Период
Сортировка
От Stephan Szabo
Тема Re: Wacky query plan, why?
Дата
Msg-id 20030726084506.D75584-100000@megazone.bigpanda.com
обсуждение исходный текст
Ответ на Re: Wacky query plan, why?  ("Maksim Likharev" <mlikharev@aurigin.com>)
Список pgsql-general
On Fri, 25 Jul 2003, Maksim Likharev wrote:

> Yes I see, no words about FROM cause in SQL92/99, but
> it seems like Postgres supports that.

Yeah, it's an extension to the standard behavior.

> So bottom line:
> insted of
>
> update prod.t_results set fan = a.fullname, fin=i.fullname
> from prod.t_results r inner join prod.t_agn a
>     on r.faid = a.aid
> inner join prod.t_inv i
>     on r.fiid = i.iid
>         where r.docid = 22544257;
>
> I should use
>
> update prod.t_results set fan = a.fullname, fin=i.fullname
> from prod.t_results r inner join prod.t_agn a
>     on r.faid = a.aid
> inner join prod.t_inv i
>     on r.fiid = i.iid
>         where r.docid = 22544257 and prod.t_results.docid =
> r.docid;

Why not just something like:

update prod.t_results set fan=a.fullname, fin=i.fullname
 from prod.t_agn a, prod.t_inv i
 where prod.t_results.faid = a.aid and
       prod.t_results.fiid = i.iid and
       prod.t_results.docid = 22544257;

I don't see much need to join a second copy of t_results into the query.

> BTW, what it's doing in a first place, looks up tuples generated in FROM
> clause
> against prod.t_results table?

AFAIK it's similar in behavior to if you'd written a select of the form

select * from
 t_results, t_results r inner join t_agn a on r.faid=a.aid inner join
  t_inv i on r.fiid = i.iid
where r.docid = 22544257;

You've got two copies of t_results being joined in the result and the
first is not constrained in any way so you get an "output" row for each
row of the inner join set for each row in t_results.


В списке pgsql-general по дате отправления:

Предыдущее
От: Bruce Momjian
Дата:
Сообщение: Re: Using YY-MM-DD date input
Следующее
От: Andy Kopciuch
Дата:
Сообщение: Email disaster