22

それ自体にクロス結合したいテーブルがある場合、重複した行を削除するにはどうすればよいですか? または、別の言い方をすれば、「順序は関係ない」クロス結合を行うにはどうすればよいですか?

たとえば、テーブル T がある場合:

field |
-------
   A  |
   B  |
   C  |

A | を取得しないように、それ自体に交差結合します。行

T as t1
cross join
T as t2
  on t1.field != t2.field

私は次のようになります:

field | field
------+-------
  A   |   B
  A   |   C
  B   |   A
  B   |   C
  C   |   A
  C   |   B

しかし、私にとってA、BはB、Aと同じです。

これらの重複を削除する良い方法はありますか? 言い換えれば、順列ではなく組み合わせが必要です。

4

1 に答える 1

34
T as t1
inner join
T as t2
  on t1.field < t2.field

FWIW、これに使用できますがINNER JOIN、厳密にはCROSS JOIN. MySQL (およびおそらく他の RDBMS) は、これら 2 つのタイプの結合を同一のものとして扱いますが、ANSI SQL では、交差結合には結合条件がありません。これは意図的なデカルト積です。

于 2011-08-18T18:50:35.080 に答える