Re: joins INNER, OUTER, LEFT, RIGHT, FULL, ...

Поиск
Список
Период
Сортировка
От Christian Fowler
Тема Re: joins INNER, OUTER, LEFT, RIGHT, FULL, ...
Дата
Msg-id Pine.LNX.4.61.0411240130250.20105@leda.steelsun.com
обсуждение исходный текст
Ответ на Re: joins INNER, OUTER, LEFT, RIGHT, FULL, ...  ("Roderick A. Anderson" <raa@mailporter.net>)
Список pgsql-admin
On Tue, 23 Nov 2004, Roderick A. Anderson wrote:

> Jaime Casanova wrote:
>
>> http://www.postgresql.org/docs/7.4/static/queries-table-expressions.html#QUERIES-JOIN
>>
> Been there, done that.  Bought several tee-shirts.
>
>> What do you mean with *complex joins*?
>>
>
> SELECT first, last, username || '@' || dom.domain as emailaddress
> FROM cust_main cm
>  LEFT OUTER JOIN cust_pkg    cp ON ( cm.custnum = cp.custnum )
>  LEFT OUTER JOIN cust_svc    cs ON ( cp.pkgnum  = cs.pkgnum )
>  LEFT OUTER JOIN svc_email   em ON ( cs.svcnum  = em.svcnum )
>  LEFT OUTER JOIN svc_domain dom ON ( em.domain  = dom.svcnum )
> WHERE zip = '99999'
>   AND username || '@' || dom.domain != '@'
>
> Which worked until I added one more table with a one-to-one relation to
> cust_main.custnum.  Then I got several tuples (2+) for each row above.

try:

SELECT first, last, username || '@' || dom.domain as emailaddress
FROM cust_main cm
  INNER JOIN one_more om ON ( om.custnum = cm.custnum )
  LEFT OUTER JOIN cust_pkg    cp ON ( cm.custnum = cp.custnum )
  LEFT OUTER JOIN cust_svc    cs ON ( cp.pkgnum  = cs.pkgnum )
  LEFT OUTER JOIN svc_email   em ON ( cs.svcnum  = em.svcnum )
  LEFT OUTER JOIN svc_domain dom ON ( em.domain  = dom.svcnum )
WHERE zip = '99999'
   AND username || '@' || dom.domain != '@'

or

SELECT first, last, username || '@' || dom.domain as emailaddress
FROM one_more om, cust_main cm
  LEFT OUTER JOIN cust_pkg    cp ON ( cm.custnum = cp.custnum )
  LEFT OUTER JOIN cust_svc    cs ON ( cp.pkgnum  = cs.pkgnum )
  LEFT OUTER JOIN svc_email   em ON ( cs.svcnum  = em.svcnum )
  LEFT OUTER JOIN svc_domain dom ON ( em.domain  = dom.svcnum )
WHERE zip = '99999'
   AND om.custnum=cm.custnum
   AND username || '@' || dom.domain != '@'


The explicit join syntax was freaky for me too at first,  but after
several years, I prefer it now, since you can easily control your left
outer joins


[ \ /
[ >X<   Christian Fowler      | spider AT viovio.com
[ / \   http://www.viovio.com | http://www.tikipro.org

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

Предыдущее
От: "Roderick A. Anderson"
Дата:
Сообщение: Re: joins INNER, OUTER, LEFT, RIGHT, FULL, ...
Следующее
От: Francisco Jose Bernabe Pellicer
Дата:
Сообщение: Where are DB's?