TSQL左连接多个右手行

时间:2009-07-11 17:04:21

标签: sql sql-server tsql left-join

当您在TSQL(MSSQL SERVER)中执行左连接时,如果右侧有多行,是否可以保证哪一行将与您的查询一起返回?

我正在尝试使用它来利用正确的表格上的排序。

所以

Select ColA, ColB, ColC 
from T
Left Outer Join 
   (Select ColA, ColB, ColC 
   from T--CLARIFIED, this is a self join.
   Order by TopColumn Desc) AS OrderedT(ColA, ColB, ColC) 
   On T.ColA = OrderedT.ColA

我希望能够检索Table中的所有ColA,并根据我的订单检查左连接的ColA结果集中的所有第一行。

语言或服务器对此有何保证?

3 个答案:

答案 0 :(得分:4)

我相信你需要这个......

select T.ColA, T.ColB, T.ColC 
from T
inner join
   (select ColA, max(TopColumn) MaxTopColumn
   from T
   group by ColA) OrderedTable
   on T.ColA = OrderedTable.ColA and T.TopColumn = OrderedTable.MaxTopColumn

版本化表的相当常见的查询需要内部联接到最大查询。

表名“表”无济于事,我已将其重命名为T。

答案 1 :(得分:2)

不那么简单。 LEFT JOIN返回所有匹配的右侧行。所以关于担保的问题并不是真正相关的。您必须使用子查询执行某些操作才能获得所需的单行,并使用子查询中的TOP 1。

答案 2 :(得分:1)

LEFT JOIN返回满足任何WHERE标准的所有左手行,无论右侧是否有匹配的行(在连接键上)。右表中的列将返回NULL,其中连接键不匹配。