2016-03-02 50 views
0

我有一個client,clientcontactscontactphones表。從postgresql中的3個表中獲取行

每個客戶端可能有很多聯繫人,每個聯繫人可能有多個電話。

一些定義爲賣家的客戶,這意味着sellerid是FK到clientid

我想在這裏我給clientid編寫一個查詢並返回與手機銷售商的聯繫人(如果存在的話)

例如:

客戶

clientid name sellerid 
1   jack 
2   jeff 
3   robin 1 

clientcontacts

contactid clientid name 
1    1  Robert 
2    1  Magen 
3    3  Sara 
4    3  Rebeca 

contactphones

contactphoneid contactid phone 
1     1  00522 
2     1  15541 
3     1  555841 
4     3  120 
5     3  121 
6     3  127 

如果我給的clientid = 3 的出放應在接觸&手機客戶端ID = 1怎麼一回事,因爲1是3賣方如下:

Sara 120 
Sara 121 
Sara 127 
Rebeca 

我試過以下內容:

With seller (select sellerid from clients where clientid=INPUT) 
select name,phone 
from clientcontacts 
using seller 
left join contactphones on(clientcontacts.contactid=contactphones.contactid) 
where clientcontacts.clientid=seller.sellerid 

這給:

ERROR: syntax error at or near "using"

我怎麼能這樣做的查詢? 如果可能,沒有WITH它是優先考慮的。

如果有人也可以解釋什麼excaly是我的查詢問題,可能是偉大的......我不明白爲什麼USING不在這裏工作。

+1

你試過簡單的JOIN嗎? – jarlh

+0

是的......不能使它工作......我無法得到所需的結果,因爲你不能這樣做:clientid =輸入和clientid = resellerid –

回答

1

首先做一個內部連接以獲得所有與之聯繫的客戶聯繫人(與該聯繫人)。然後做一個左外連接到挑選那些clientcontacts'電話號碼(如果可用):

select cc.name, cp.phone 
from clientcontacts cc 
join clients c on cc.clientid = c.clientid 
left join contactphones cp on cc.contactid = cp.contactid 

where c.clientid = 3 

執行爲:

SQL>create table clients (clientid int, name varchar(10), sellerid int); 
SQL>insert into clients values (1,'jack',null); 
SQL>insert into clients values (2,'jeff',null); 
SQL>insert into clients values (3,'robin',1); 
SQL>create table clientcontacts (contactid int, clientid int, name varchar(10)); 
SQL>insert into clientcontacts values (1,1,'Robert'); 
SQL>insert into clientcontacts values (2,1,'Magen'); 
SQL>insert into clientcontacts values (3,3,'Sara'); 
SQL>insert into clientcontacts values (4,3,'Rebeca'); 
SQL>create table contactphones (contactphoneid int, contactid int, phone 
SQL&varchar(10)); 
SQL>insert into contactphones values (1,1,'00522'); 
SQL>insert into contactphones values (2,1,'15541'); 
SQL>insert into contactphones values (3,1,'555841'); 
SQL>insert into contactphones values (4,3,'120'); 
SQL>insert into contactphones values (5,3,'121'); 
SQL>insert into contactphones values (6,3,'127'); 
SQL>select cc.name, cp.phone 
SQL&from clientcontacts cc 
SQL&join clients c on cc.clientid = c.clientid 
SQL&left join contactphones cp on cc.contactid = cp.contactid 
SQL& 
SQL&where c.clientid = 3; 
name  phone 
========== ========== 
Sara  120 
Sara  121 
Sara  127 
Rebeca  - 

        4 rows found 

不是你問什麼?

+0

這是行不通的。這只是給了clientid = 3的聯繫人。這不是需要.....當輸入clientid = 3時,我需要看到clientid = 1的聯繫人 –