3

NATURAL JOIN を使用して 2 つのテーブルを結合すると、共通列名に基づいて結合操作が実行されます。2 つのテーブルに同じ名前の 2 つの列がある場合、共通のレコードのみが表示されます。

名前が同じでデータ型が異なる列がある場合、それらの列も結合されるという 1 つのクエリがあります。つまり、table1 の column_1 にはデータ型 INTEGER があり、table2 の column_1 にはデータ型 VARCHAR があるとします。これら 2 つの列に基づいて結合が実行されます。

つまり、同じ名前の 2 つの列のデータ型に違いがある場合、自然結合はどのように行われるのでしょうか?

4

4 に答える 4

8

NATURAL JOINアンチパターンとして一般的に受け入れられています。

多くの保守性の問題が発生します。これはそのうちの 1 つにすぎません。

代わりに、フィールドを型キャストできる明示的な結合を使用してください。

  table1
INNER JOIN
  table2
    ON table2.fieldX = CAST(table1.fieldX AS INT)

経験則として、そして個人的な好みとして、明示的であることは暗黙的であることよりもはるかに維持しやすいです。そして、パフォーマンスの問題はありません。

于 2012-10-16T12:25:22.860 に答える
1

相互に変換可能である限り、データ型は一致する必要はありません。ただし、データ型が一貫していない場合、オプティマイザはインデックスを使用できない場合があります。

于 2012-10-16T12:28:26.440 に答える
1

異なるデータ型を使用する場合は、一致を実行する前にデータ型の変換を強制します。それは余分な作業です。一方、列に対して計算が実行されず、値が数値として使用されない場合は、文字として格納する必要があります。

属性のデータ型を選択したら、その列が定義されているすべてのテーブルで、その属性に同じデータ型を使用する必要があります。そうしないと、暗黙的な変換が行われる可能性があります。

于 2012-10-16T22:59:46.800 に答える