Mysql 通过关系表连接表

Mysql 通过关系表连接表,mysql,Mysql,我希望得到一个完整的公司名单与相关的联系人。即使一家公司没有任何联系人,他们也应该被包括在结果中。公司和人员表由关系值表链接 我已经为该方案创建了一个SQL FIDLE,如果有人能为我编写查询,我将不胜感激 我会看到结果如下: Company Name 1 | Person Number 1 <br> Company Name 1 | Person Number 2 <br> Company Name 2 | Person Number 3 <br> Comp

我希望得到一个完整的公司名单与相关的联系人。即使一家公司没有任何联系人,他们也应该被包括在结果中。公司和人员表由关系值表链接

我已经为该方案创建了一个SQL FIDLE,如果有人能为我编写查询,我将不胜感激

我会看到结果如下:

Company Name 1 | Person Number 1 <br>
Company Name 1 | Person Number 2 <br>
Company Name 2 | Person Number 3 <br>
Company Name 2 | Person Number 4 <br>
Company Name 2 | Person Number 5 <br>
Company Name 2 | Person Number 6 <br>
Company Name 3 | NULL <br>

您可以通过两种方法来实现此结果—一种是到关系表,另一种是到人员表。如果使用,则不会强制链接,因此仍将返回没有人员/关系的公司,但人员结果为null:

SELECT
  C.*,
  P.*
FROM 
  companies C

LEFT JOIN
  relations R
ON (R.parentmodule = 'companies' AND R.parentrecordid = C.id)

LEFT JOIN
  people P
ON (R.childmodule = 'people' AND R.childrecordid = P.id)

下面的查询获取所需的输出。由于两个表之间使用了内部联接,因此速度应该稍快一些

SELECT  
    c.companyname,      
    p_r.firstname,      
    p_r.lastname  
FROM companies c 
LEFT JOIN  
    (SELECT 
        r.parentrecordid, 
        p.firstname, 
        p.lastname 
    FROM relations r 
    INNER JOIN people p ON p.id = r.childrecordid AND r.childmodule = 'people'
    ) p_r 
ON p_r.parentrecordid = c.id;

如果您想尝试一下,可以使用JOIN。因为要在表1中包含行,即使它们在表2中没有条目,也应该考虑使用左联接。网上有很多例子。我做了以下几点,但是我不知道公司里有没有空的人。选择c.companyname,p.firstname。p、 公司c的lastname来自公司c