0

这是我的公司表

CompanyID, CompanyName

这是我的联系表

ContactID, ContactName, CompanyID

这是我的报告表

ReportID, ReportName

这是我的 ReportContact 表,多对多关系

ContactID, ReportID

我想返回 1 家公司的所有 CONTACTID,包括那些没有分配给任何报告的人,我还想返回分配给不同联系人的 reportID

1 个联系人可以分配给多个报告 1 个报告可以包含多个联系人

我当前的 SQL 代码只能设法在 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?

4

2 回答 2

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
于 2013-06-11T06:53:23.180 回答
0

我不是 100% 确定我理解你想要做什么,但如果你想要联系人表中的所有行,那么你需要使用 OUTER 而不是 INNER 连接。

尝试将单词 INNER 更改为 LEFT。

INNER 连接确保满足连接条件的行出现在两个表中。

一个 OUTER 连接表示“显示一个表中的所有行,以及另一个表中满足连接条件的行”。哪个表显示所有行取决于关键字 LEFT 和 right 的使用

a left join b on a.id = b.id将显示表 a 中的所有行以及 b 中满足连接条件的所有行

a right join b on a.id = b.id将显示表 b 中的所有行以及满足连接条件的 a 中的行

于 2013-06-11T06:57:06.913 回答