私はクエリに内部結合を入れていますが、結果は出ていますが、データがどのように出力されるのかわかりませんでした。 2つのテーブル(1つまたは2つのテーブル)。
私によると、最初の行はMohitであるべきですが、出力は異なります。教えてください。
前もって感謝します。
データを特定の方法で戻すには、ソートする必要があります。 「Mohit
」が最初の行であることを期待していると言うとき、「Mohit
」が[One]
テーブルの最初の行であるため、あなたが言うと仮定しています。ただし、SQL Serverがテーブルを結合する場合、必ずしも思った順序で結合するとは限りません。
[One]
の最初の行を返す場合は、[One].[ID]
でソートしてみてください。または、order by
他の列を使用できます。
SQL
では、ORDER BY
句で指定しない限り、出力の順序は定義されません。
これを試して:
SELECT *
FROM one
JOIN two
ON one.one_name = two.one_name
ORDER BY
one.id
メインクエリではSELECT *
を避けてください。
列の重複を避ける:JOIN
条件により、One.One_Name
とtwo.One_Name
が等しくなるため、SELECT
句で両方を返す必要はありません。
列名の重複を避けます。「エイリアス」を使用して、One.ID
とTwo.ID
の名前を変更します。
SELECT
句の列名(該当する場合は「エイリアス」)を使用してORDER BY
句を追加します。
推奨される書き換え:
SELECT T1.ID AS One_ID, T1.One_Name,
T2.ID AS Two_ID, T2.Two_name
FROM One AS T1
INNER JOIN two AS T2
ON T1.One_Name = T2.One_Name
ORDER
BY One_ID;
最初のクエリの最後にORDER BY ONE.ID ASC
を追加します。
デフォルトでは順序付けはありません。
SQLは、この方法の方が高速であるため、デフォルトでは順序を返しません。最初にデータを調べてから、何をすべきかを決める必要はありません。
Order by句を追加する必要があります。おそらく、予想されるIDで並べ替える必要があります。 (名前の重複があるため、One.IDが必要だと思います)
select * From one
inner join two
ON one.one_name = two.one_name
ORDER BY one.ID
参加時にこれが問題であることがわかりましたが、このブログは参加者がどのように機能するかを理解するのに役立ちます。 結合の仕組み..
[編集] @Shreeそれを指摘してくれてありがとう。結合の結合の段落。結合の仕組みについて言及しています...
ハッシュ結合と同様に、マージ結合は2つのステップで構成されます。最初に、結合の両方のテーブルが結合属性でソートされます。これは、外部マージソートを介して各テーブルを2回パスするだけで実行できます。最後に、次の順序付けられた要素が各テーブルから取り出され、結合属性が比較されると、結果のタプルが生成されます
。