如何在同一张数据库表上两次施加左联接(left outer join)!

来源:互联网 发布:json get post 编辑:程序博客网 时间:2024/04/20 00:27

    今天拼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;

           这样就实现了在一个数据库表中同时两次左联接。