我希望获得一个包含相关联系人的完整公司列表。即使公司没有任何联系,他们仍应包括在结果中。公司和人员表由关系值表链接。
我为该方案创建了一个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>
答案 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)
答案 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;