Sql 左外部联接的行为类似于内部联接
我有三张桌子:T1,T2,T3 我需要在结果中包含T1中的所有行,如果T2和T3中有匹配的记录,那么也输出它们 所以我的问题看起来像Sql 左外部联接的行为类似于内部联接,sql,sql-server,tsql,join,left-join,Sql,Sql Server,Tsql,Join,Left Join,我有三张桌子:T1,T2,T3 我需要在结果中包含T1中的所有行,如果T2和T3中有匹配的记录,那么也输出它们 所以我的问题看起来像 SELECT * FROM T1 LEFT JOIN T2 ON T1.Id = T2.Id INNER JOIN T3 ON T2.SecondId = T3.Id 但结果是,我只收到T3中有一些记录的记录。 这和我写的一样吗 SELECT * FROM T1 LEFT JOIN T2 ON T1.Id = T2.Id WHERE T2.Val
SELECT *
FROM T1
LEFT JOIN T2
ON T1.Id = T2.Id
INNER JOIN T3
ON T2.SecondId = T3.Id
但结果是,我只收到T3中有一些记录的记录。
这和我写的一样吗
SELECT *
FROM T1
LEFT JOIN T2
ON T1.Id = T2.Id
WHERE T2.Value = 4
where LEFT JOIN的行为类似于内部JOIN,因为where子句?您可能需要的语法是:
SELECT *
FROM T1 LEFT JOIN
T2
ON T1.Id = T2.Id LEFT JOIN
T3
ON T2.SecondId = T3.Id
如果没有第二个左连接
,则内部连接
会过滤掉不匹配项。这是因为对于那些不匹配项,T2.SecondId
将为NULL
。这是正确的方法;显式检查NULL
s有一些边缘情况不起作用
对于第二个查询:
SELECT *
FROM T1 LEFT JOIN
T2
ON T1.Id = T2.Id AND T2.Value = 4
是的,你明白了。该条件需要进入
ON
子句。外部联接
从一侧(左侧或右侧)返回另一侧没有匹配行的行。on
子句定义匹配条件并允许空值。您可以使用where
子句,但需要对其进行编码以正确处理空值,例如。。。其中T2.Value为NULL或T2.Value=4代码>以使其按预期工作。@GordonLinoff所以我需要使用左连接两次来获得我想要的,对吗?这是一个常见问题解答。在考虑发帖之前,请阅读您的教科书和/或手册,并在谷歌上搜索任何错误消息或您的问题/问题/目标的许多清晰、简洁和准确的措辞,包括或不包括您的特定字符串/名称和网站:stackoverflow.com&tags;阅读许多答案。如果你发布一个问题,用一句话作为标题。反思你的研究。请参阅文本上方的投票箭头鼠标(&T)。好的,明白。谢谢