9

重複の可能性:
SQLのクロス結合からの組み合わせ(順列ではない)

現在、次のレコードを含むテーブルがあります。

A1
A2
A3
B1
B2
C1
C2

同じ文字は、いくつかの共通の基準を示します (たとえば、列「文字」の共通の値)。次のように、基準に基づいて自己結合を行います。

SELECT mytable.*, self.* FROM mytable INNER JOIN mytable AS self 
   ON (mytable.letter = self.letter and mytable.number != self.number);

この結合により、次のような結果が得られます。

A1 A2
A2 A1
A1 A3
A3 A1
A2 A3
A3 A2
B1 B2
B2 B1
C1 C2
C2 C1

ただし、各ペアを 1 回だけ含めたい (順列ではなく組み合わせ)。どうすれば次のようになりますか:

A1 A2
A1 A3
A2 A3
B1 B2
C1 C2
4

1 に答える 1

19

JOIN 条件を少し変更すると、目的が達成されます。

それ以外の:

ON (mytable.letter = self.letter and mytable.number != self.number)

使用する

ON (mytable.letter = self.letter and mytable.number > self.number)

これには、結果が各組み合わせの 1 つの有効な順序に制限されるself.numberよりも大きい組み合わせのみが含まれます...mytable.number

于 2011-09-17T06:49:14.413 に答える