我想加入三张桌子。 第一个表(联系人)包含cid(主键),名称。 第二个表(familyInfo)包含fid(主键),cid(fk),联系人姓名和relationID(fk) 。第三个表(关系类型)包含relationID(主键),relationType如父亲,母亲,兄弟等......
查询应该连接第一个表中的所有行和第二个表中的第一个匹配行....不具有任何关系的联系人应该显示为null ....只有第一个匹配关系应该显示在结果中
答案 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
将帮助您找到第二张表中第一个匹配的行