【发布时间】:2012-12-21 22:24:10
【问题描述】:
假设我在 SQL Server 2008 R2 中有三个表
SELECT a.*, b.*, c.*
FROM
Table_A a
RIGHT JOIN Table_B b ON a.id = b.id
LEFT JOIN Table_C c ON b.id = c.id
或
SELECT a.*, b.*, c.*
FROM
Table_A a
RIGHT JOIN Table_B b ON a.id = b.id
JOIN Table_C c ON b.id = c.id
另外,我在加入 c 时使用 b.id 还是 a.id 有关系吗?
即而不是JOIN Table_C c ON b.id = c.id,使用JOIN Table_C c ON a.id = c.id
谢谢!
【问题讨论】:
-
不,您不必在右连接后进行左连接;您可以在第一个 RIGHT JOIN 之后执行 INNER JOIN 或另一个 RIGHT JOIN。是的,一般来说,加入什么很重要。
-
不,你错了。右连接后需要左连接。看我的回答。
-
在语法上,根据 SQL 标准,没有限制必须在 RIGHT JOIN 之后执行 LEFT JOIN。要使用一组特定的表来制定特定的查询,您可能需要在 RIGHT JOIN 之后执行 LEFT JOIN,但这是特定查询的属性,而不是 SQL 语法的属性。您将能够重新排序查询中的术语。你必须小心你加入哪些列。
-
有趣的是,当你的孩子问你下雨时他是否必须打开雨伞而你说不时,你的回答很有趣,没有限制下雨时必须打开雨伞。那么首先使用雨伞有什么意义呢?对不起,是的,你是对的,但我无法从你的回答中得到任何信息。
-
您的问题中缺少关于您希望保留
Table_B中的 all 行的部分。如果添加它会更有意义,因为答案是“是的,你需要外部加入Table_C”,否则答案是“这取决于你想要的结果”。
标签: sql sql-server-2008 join outer-join