SQL Server加入顺序

时间:2014-06-24 05:20:57

标签: sql-server sql-server-2008 sql-server-2008-r2 sql-server-2012 sql-server-2014

我使用SQL Server并拥有多个加入的查询。

我希望SQL Server首先连接表A和B,然后与表C连接。

但SQL Server首先连接表B和C,然后与表A连接。

如何强制SQL Server观察我的连接顺序。

提前致谢。

3 个答案:

答案 0 :(得分:2)

您可以使用查询提示FORCE ORDER

来自Query Hints (Transact-SQL)

  

指定查询语法指示的连接顺序   在查询优化期间保留。

答案 1 :(得分:0)

在没有强制顺序的情况下,一种实现方法是嵌套连接,因为以下两个语句都相等:

SELECT *
FROM A 
JOIN B ON B.ID = A.BID
JOIN C ON C.ID = A.CID

SELECT * 
FROM (A JOIN B ON B.ID = A.BID) 
JOIN C ON C.ID = A.CID

这是可行的,因为所有联接都是内部联接(也适用于所有LEFT OUTER),但不适用于组合联接

答案 2 :(得分:-1)

加入订单与您在选择查询中提供的顺序相同。

此处没有强制逻辑,只有您提供的订单和加入列条件才会过滤数据。

如果在join子句中给出primary-key或composite key选项,那么非常好。如果您使用2个事务表然后加入主表,则会出现问题。

始终先使用main或master表,然后逐个添加辅助表。

您可以查看执行计划。

enter image description here