这是我的公司
CompanyID, CompanyName
这是我的联系人表
ContactID, ContactName, CompanyID
这是我的报表
ReportID, ReportName
这是我的ReportContact表,多对多关系
ContactID, ReportID
我想返回1个公司的所有CONTACTID,包括那些没有分配给任何报告的,我还想返回分配给不同联系人的reporttid
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表中的联系人,但同时获得reporttid ?
INNER JOIN
过滤掉不在ReportContact
中的行。如果您想从contact
表中获取所有联系人,请尝试使用LEFT JOIN
。
SELECT rc.ContactID, rc.ReportID
FROM contact c LEFT JOIN Reportcontact rc
ON c.ContactID = rc.ContactID
WHERE CompanyID = 1
我不是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中满足连接条件的行