Условное соединение PostgreSQL

Предположим, у меня есть следующие таблицы -

smallville=# create table contacts (name varchar(16), address_id int); 
CREATE TABLE
smallville=# create table addresses (address_id int, address varchar(16));
CREATE TABLE
smallville=# create table partners (name1 varchar(16), name2 varchar(16));
CREATE TABLE

smallville=# insert into contacts values ('Clark Kent', NULL), ('Loise Lane', 1);
INSERT 0 2
smallville=# insert into addresses values (1, 'Manhattan'), (2, 'North Pole');
INSERT 0 2
smallville=# insert into partners values ('Clark Kent', 'Loise Lane'),
             ('Loise Lane', 'Clark Kent') ; 
INSERT 0 2

Я могу получить имена и адреса -

smallville=# select c.name, a.address from contacts c
             left outer join addresses a
             on c.address_id = a.address_id ; 
    name    |  address  
------------+-----------
 Clark Kent | (NULL)
 Loise Lane | Manhattan
(2 rows)

Но как мне получить следующее, т.е. показать адрес его / ее партнера, если адрес отсутствует? -

    name    |  address  
------------+-----------
 Clark Kent | Manhattan
 Loise Lane | Manhattan
(2 rows)

Спасибо.

9
задан Jerry 29 May 2011 в 14:42
поделиться