2011-05-29 18 views
9

पहनना पड़ता है मेरे पास निम्न तालिकाओं -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) 

धन्यवाद।

उत्तर

16
select c.name, coalesce(a.address, a1. address) from contacts c 
left outer join addresses a on c.address_id = a.address_id 
left outer join partners on c.name=partners.name1 
left outer join contacts c1 on c1.name=partners.name2 
left outer join addresses a1 on c1.address_id = a1.address_id; 
+0

धन्यवाद, मैं यह टिप्पणी करने के लिए यहां आ रहा था कि मैं नॉन और गैर-नल संपर्कों को गले लगाने के लिए यूनियन का उपयोग करूंगा। लेकिन आपका बहुत अधिक कूलर है। सुपर! – Jerry

संबंधित मुद्दे