当您在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结果集中的所有第一行。
语言或服务器对此有何保证?
答案 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,其中连接键不匹配。