我有client
,clientcontacts
和contactphones
表。
每个客户可能有很多联系人,每个联系人可能有很多电话。
某些客户定义为卖家,这意味着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 输出应该是联系人& clientid = 1 beacuse 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
这给出了:
错误:“使用”
处或附近的语法错误
我该怎么做这个查询?
如果可能,如果没有WITH
则优先。
如果有人也可以解释我的查询问题是什么,那可能很棒......我不明白为什么USING
在这里不起作用。
答案 0 :(得分:1)
首先进行内部联接以获取所有具有联系人(具有该clientid)的客户端联系人。然后执行左外连接以选择那些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
这不是你要的吗?