连接两个表并从第二个表中只获取第一个匹配的行

时间:2017-01-31 17:49:20

标签: sql sql-server join relational-database left-join

我想加入三张桌子。 第一个表(联系人)包含cid(主键),名称。 第二个表(familyInfo)包含fid(主键),cid(fk),联系人姓名和relationID(fk) 。第三个表(关系类型)包含relationID(主键),relationType如父亲,母亲,兄弟等......

查询应该连接第一个表中的所有行和第二个表中的第一个匹配行....不具有任何关系的联系人应该显示为null ....只有第一个匹配关系应该显示在结果中

请帮忙, 谢谢! I have added image of table structures and expected output for better understanding ...please click here for image

1 个答案:

答案 0 :(得分:0)

您需要使用OUTER APPLY

SELECT c.cid,
       c.NAME,
       oa.contact_name
FROM   contacts c
       OUTER APPLY (SELECT TOP 1 f.contact_name
                    FROM   familyInfo f
                    WHERE  c.cid = f.cid
                    ORDER  BY relationID) oa 

工作原理

Outer apply将返回左表中的所有记录,即使在右表中找不到匹配的记录

带有Top 1

Order by将帮助您找到第二张表中第一个匹配的行