2

当您在 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

我希望根据我的排序检索表中的所有 ColA,以及我的左连接的 ColA 结果集中的所有第一行。

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

4

3 回答 3

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

对版本化表相当常见的查询,需要对最大查询进行内部连接。

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

于 2009-07-11T17:20:52.413 回答
2

没那么简单。LEFT JOIN 返回所有匹配的右侧行。所以这里关于保证的问题并不重要。您必须使用子查询中的 TOP 1 对子查询执行某些操作才能获得所需的单行。

于 2009-07-11T17:07:42.500 回答
1

LEFT JOIN 返回满足任何 WHERE 条件的所有左侧行,无论右侧是否存在匹配行(在连接键上)。右表中的列将在连接键不匹配的情况下返回为 NULL。

于 2009-07-11T17:11:32.353 回答