2011-07-11 18 views
3

我正在使用MySQL。假设我有表A,B和C.表A是基表。表B和C都有表A的外键。但是我想抽出行,以便输出看起来像这样。是否有可能在SQL中有“空行”?

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

绝不是一个完整的答案,但是执行从表A到表B的'OUTER JOIN'会为B中的所有列带回NULL,如果表A中有匹配但不匹配在表B中。 –

+2

因为我理解这个问题,那不是全部答案。如果B中有东西,C应该是NULL。如果B中没有任何内容,请查找C. –

回答

6

关于它的思考,外连接是不会给你想要的输出格式。试试这样:

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 
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 
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