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 に答える