Re: how to do this join ?

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: how to do this join ?
Дата
Msg-id 25386.986568373@sss.pgh.pa.us
обсуждение исходный текст
Ответ на how to do this join ?  (juerg.rietmann@pup.ch)
Список pgsql-sql
juerg.rietmann@pup.ch writes:
> select *,
> (select a_typ from auftrag where a_nr=z_a_nr) as typ,
> (select a_t_definition_d from auftrags_typ where a_t_code=typ) as text
> from zylinder

Seems like a very non-SQLish way to proceed.  Instead use joins:

select zylinder.*, a_typ as typ, a_t_definition_d as text
from zylinder, auftrag, auftrags_typ
where a_nr = z_a_nr and a_t_code = a_typ

If there were multiple matches in auftrag or auftrags_typ then this
would yield multiple rows per zylinder row, which you might not want;
but your subselect-based approach is already assuming there are not
multiple matches.

If there's a possibility of *no* matching row, then the first solution
would emit NULLs for the missing auftrag and auftrag_typ values, whereas
the second would emit nothing at all for that zylinder row.  If that's
not what you want, you need to use outer joins (new in 7.1):

select zylinder.*, a_typ as typ, a_t_definition_d as text
from (zylinder left join auftrag on (a_nr = z_a_nr))    left join auftrags_typ on (a_t_code = a_typ);
        regards, tom lane


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

Предыдущее
От: Peter Eisentraut
Дата:
Сообщение: Re: how to do this join ?
Следующее
От: Jie Liang
Дата:
Сообщение: Does pg_dump stable on v7.0