我在组合键上连接两个表,我想知道在我进行连接时比较相应的列是否很重要。在SQL Server中连接两个表时,检查组合键的一部分时重要吗?
假设我有一个TableA表,列ColAFoo,ColAFoo2和ColABar。 TableA有一个包含ColAFoo和ColAFoo2(PK_TableA)的组合主键。
我也有TableB,与ColBFoo,ColBFoo2和ColBOther。 TableB的列ColBFoo和ColBFoo2包含TableA主键的外键(FK_TableA_TableB)。
我需要加入密钥上的两个表。在表现方面,以下三种(非常人为设计)的表述有什么区别?
SELECT * FROM TableA a JOIN TableB b ON a.ColAFoo = b.ColBFoo AND a.ColAFoo2 = b.ColBFoo2 SELECT * FROM TableA a JOIN TableB b ON a.ColAFoo = b.ColBFoo WHERE a.ColAFoo2 = b.ColBFoo2 -- this one is a little /too/ contrived, apparently (see comments)SELECT * FROM TableA a JOIN TableB b WHERE a.ColAFoo = b.ColBFoo AND a.ColAFoo2 = b.ColBFoo2
第三个选项是否实际在SQL Server上运行?我认为'on'是'join'关键字所必需的。 (除了'交叉连接'的情况,但我没有SQL Server方便测试 – 2010-08-24 15:58:18
@ Shannon:同意最后一个例子应该写成:'SELECT * FROM TableA a,TableB b WHERE a .ColAFoo = b.ColBFoo AND a.ColAFoo2 = b.ColBFoo2' – 2010-08-24 16:09:34
好的。:)我会相应地更新问题文本。 – stack 2010-08-24 16:59:40