我正在使用MySQL。假设我有表A,B和C.表A是基表。表B和C都有表A的外键。但是我想拉出行,以便输出看起来像这样。
A | B | C
----------------
1 | 1 | NULL
1 | 2 | NULL
1 | NULL | 1
1 | NULL | 2
2 | 3 | NULL
2 | NULL | 3
因此,当B不再为某个键留下任何行时,查询会转到C并停止为B输出行。这看起来应该很简单,但我似乎无法想出它的方式应该完成。
此问题的标题可能没有意义,但我不确定如何最好地描述该情景。
答案 0 :(得分:6)
考虑到这一点,OUTER JOIN不会为您提供所需的输出格式。尝试这样的事情:
SELECT a.id AS A, b.id AS B, NULL AS C
FROM tableA a
INNER JOIN tableB ON a.id = b.fid
UNION
SELECT a.id AS A, NULL AS B, c.id AS C
FROM tableA a
INNER JOIN tableC ON a.id = c.fid
ORDER BY 1
答案 1 :(得分:2)
当然,是的,LEFT JOIN
是你最敏捷的刀。
SELECT A.*,B.*,C.* FROM A
LEFT JOIN B ON A.ID = B.REFID
LEFT JOIN C ON A.ID = C.REFID
答案 2 :(得分:0)
您可以使用外部联接:
select a.id, b.id, c.id
from a
left join b on a.id = b.id
left jon c on a.id = c.id