通过关系表连接表

时间:2014-08-04 21:21:27

标签: mysql

我希望获得一个包含相关联系人的完整公司列表。即使公司没有任何联系,他们仍应包括在结果中。公司和人员表由关系值表链接。

我为该方案创建了一个SQL小提琴,如果有人可以为我编写查询,我会很感激。

http://sqlfiddle.com/#!2/34a0a

我会看到结果如下:

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>

2 个答案:

答案 0 :(得分:1)

您可以使用两个joins - 一个到您的关系表,然后另一个到您的人员表来实现此结果。如果您使用left join,则不会强制使用该链接,因此仍然会返回没有人/关系的公司,但该人的结果为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)

Output

答案 1 :(得分:1)

以下查询获取所需的输出。由于在两个表之间使用内连接,因此它应该稍快一些。

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;

SQL Fiddle demo