这是我的公司表
CompanyID, CompanyName
这是我的联系表
ContactID, ContactName, CompanyID
这是我的报告表
ReportID, ReportName
这是我的ReportContact表,多对多关系
ContactID, ReportID
我想要退回1家公司的所有CONTACTID,包括那些未分配给任何报告的人,我还想返回分配给不同联系人的reportID
可以为多个报告分配1个联系人 1个报告可以包含许多联系人
我当前的SQL CODE只设法获取ReportContactTable中的2 contactID
SELECT rc.ContactID, rc.ReportID from contact c INNER JOIN Reportcontact rc on c.ContactID = rc.ContactID Where CompanyID=1
如何返回所有联系人包括那些不在reportcontact表中的联系人,但是同时获取reportID?
答案 0 :(得分:1)
INNER JOIN
过滤掉ReportContact
以外的行。如果您想要LEFT JOIN
表中的所有联系人,请尝试使用contact
。
SELECT rc.ContactID, rc.ReportID
FROM contact c LEFT JOIN Reportcontact rc
ON c.ContactID = rc.ContactID
WHERE CompanyID = 1
答案 1 :(得分:0)
我不是100%确定我理解你要做的是什么,但是如果你想要联系表中的所有行,那么你需要使用OUTER而不是INNER join。
尝试将单词INNER更改为LEFT。
INNER联接确保满足连接条件的行出现在两个表中。
OUTER join表示“向我显示一个表中的所有行,以及那些满足其他表中的连接条件的行”。哪个表显示所有行取决于使用关键字LEFT和右
a left join b on a.id = b.id
将显示表a中的所有行以及满足连接条件的b中的行
a right join b on a.id = b.id
将显示表b中的所有行以及满足连接条件的行