mySQL-如何使用INNER JOIN显示所有联系人及其状态

时间:2013-06-11 06:49:14

标签: mysql sql database

这是我的公司表

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?

2 个答案:

答案 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中的所有行以及满足连接条件的行