今天拼sql时遇到一个问题:
我有两张表:1.客户档案表(CT_CYK_CustomerBaseInfo),2.客户的基本信息表(T_BD_Customer )。
在客户档案表中有一个字段(CFCustNameID),它作为外键和客户基本信息进行连接,这个字段代表客户的名称信息。
在客户档案中我还有一个字段,它作为外键又和客户基本信息又有一个连接,这个字段代表客户的联系人。也就是说客户档案中有两个字段作为外键连接到客户基本信息表中,连接的却又不是同一条记录。
现在我要查询客户档案的详细信息,刚开始,我拼出的sql如下:
select *
from CT_CYK_CustomerBaseInfo
LEFT OUTER JOIN T_BD_Customer ON CT_CYK_CustomerBaseInfo.CFCustNameID=T_BD_Customer.FID
LEFT OUTER JOIN T_BD_Customer ON CT_CYK_CustomerBaseInfo.CFMainLinkMenID=T_BD_Customer.FID;
接下来测试sql,sql语句有问题,不能同时左链接同一张表。
后来我又改:
select *
from CT_CYK_CustomerBaseInfo
LEFT OUTER JOIN T_BD_Customer ON CT_CYK_CustomerBaseInfo.CFCustNameID=T_BD_Customer.FID
and CT_CYK_CustomerBaseInfo.CFMainLinkMenID=T_BD_Customer.FID;
这次语法正确了,可是这连接的是满足on后两个条件的同一条记录,并不是我所要的查询结果。
最后,我把客户的基本信息表进行的重新命名,然后修改了sql语句,取得成功,结果如下:
select *
from CT_CYK_CustomerBaseInfo
LEFT OUTER JOIN T_BD_Customer ON CT_CYK_CustomerBaseInfo.CFCustNameID=T_BD_Customer.FID
LEFT OUTER JOIN T_BD_Customer as linkpeople ON
CT_CYK_CustomerBaseInfo.CFMainLinkMenID=linkpeople.FID;
这样就实现了在一个数据库表中同时两次左联接。