当不满意时,SQL连接返回行

时间:2017-03-18 21:22:42

标签: sql-server join null

我有一张Monkeys表和一张Trees表,其中多对多关系由第三个MonkeysTrees FK表连接。

我有这个查询返回给定树Id的所有猴子和树:

SELECT * 
FROM Monkeys m
JOIN MonkeysTrees mt ON mt.MonkeyId = m.Id
join Trees t ON t.Id=mt.TreeId
WHERE t.Id = 1;

如果我将最终t.Id子句中的WHERE更改为不在Trees表中的Id,我仍然希望返回包含所有Monkeys的表,但在连接的字段中为NULL。我怎么能这样做?

1 个答案:

答案 0 :(得分:5)

您可以使用外部联接,下面的on子句的位置会产生Monkeys left join (MonkeysTrees inner join Trees where treeid = 1)

SELECT * 
FROM Monkeys m
LEFT JOIN MonkeysTrees mt
           INNER JOIN Trees t ON t.Id=mt.TreeId AND t.Id = 1
ON mt.MonkeyId = m.Id