2017-11-21 1 views
-1

2つのテーブル間の結合を実行するストアドプロシージャ(sp1)があります。これは、ストアドプロシージャであるストアドプロシージャは、複数のSQLデータベースで異なる順序で出力を返しています

Table1 (id, country, name, ccy) 
Table2 (sId, price) 

:テーブル用の

スキーマのようなものですつのデータベースに

SELECT 
    RTRIM(id) as id, 
    country 
FROM 
    dbo.Table1 
LEFT OUTER JOIN 
    dbo.Table2 ON Table1.Id = Table2.sId 

、私は次のような結果に

MNKD US  UnitedStates 
928502811 UnitedStates 

しかし、別のを取得していますデータベース、私は異なる順序で結果を得ています:

928502811 UnitedStates 
MNKD US  UnitedStates 

唯一の大きな違いは、テーブル1は多数のカラムで構成され、テーブル2は2つのカラムしかないことです。

誰かが理由を理解し、一貫した結果を得るためにそれを修正する方法を教えてもらえますか?ありがとう

+1

によって順序なしで、すべてのベットはオフになっています'ORDER BY' –

答えて

4

SQLテーブルと結果セットは、デフォルトでの順不同でです。唯一の例外は、クエリに明示的にorder byがある場合です。 order byがなければ、同じデータの同じデータベースに対する同じクエリは、複数回呼び出されたときに異なる順序で値を返すことができます。

あなたが特定の順序で結果をしたい場合は、order byを追加:データベース内

select trim(id) as id, country 
from dbo.Table1 left outer join 
    dbo.Table2 
    on Table1.Id = Table2.sId 
order by id; 
+0

ストアドプロシージャで「where句」を使用しているときは、常に同じ順序で与えられます。正しい順序を保証することで、それはうまくいくのですか?ありがとう –

+2

@mohituprim:***のみ***明示的な 'ORDER BY'を使用すると、何らかの順序が保証されます - それ以外のものはただの幸運の偶然です –

0

行は順序を持っていません。

あなたが特定の方法であなたの結果を注文したい場合は、例えばので、ORDER BY句を使用する必要があります。それはそれはと呼ばれる理由です...

SELECT 
RTRIM(id) as id, 
country 
from dbo.Table1 
left outer join dbo.Table2 on Table1.Id = Table2.sId 
ORDER BY id 
関連する問題