0

私は5色からなる1列だけのテーブルを持っています-

colour
-------
red
black
white
green 
orange

のようなすべての組み合わせを取得したい

(赤、オレンジ)(黒、白)。。。同一のものを除いてなど。私はそれ自体とテーブルをクロス結合しようとしました。

select * 
from table1 cross join table1

しかし、私は希望の答えを得ることができませんでした。それはすべての組み合わせを返しました。また同じものです。どうすればそれを得ることができますか?別のテーブルを作成せずにこれを行う他の方法はありますか?

4

2 に答える 2

5

同一とは、(白、白) のようなペアを意味する場合、おそらくこれが必要です。

SELECT a.color, b.color
FROM colors a
CROSS JOIN colors b
WHERE a.color != b.color

同一で、さらに (白、黒) または (黒、白) の 1 つだけを保存することを意味する場合、おそらくこれが必要です。

SELECT a.color, b.color
FROM colors a
CROSS JOIN colors b
WHERE a.color > b.color

重要な部分は、クロス結合を実行した後に不要な要素を拒否することです。

これにより、新しいテーブルが作成されたり、既存のテーブルが変更されたりすることはありませんabは、同じテーブルの 2 つの異なるエイリアスにすぎませんcolors。テーブルには 1 つの列しかありませんcolorが、テーブルは SELECT に 2 回存在するため、テーブルの両方の (事実ではなく概念的な!) インスタンスを区別する必要がありcolorsます。

a なしではできません join(行が少なすぎます)。また、エイリアスなしで簡単に行うこともできません (一部の行を拒否するには、両方の列を参照する必要があります)。また、エイリアスを割り当てる理由もありません。

于 2013-01-07T12:16:00.017 に答える
1

組み合わせ:

SELECT a.color,b.color
FROM  colors a
JOIN colors b
ON a.color < b.color

順列:

SELECT a.color,b.color
    FROM  colors a
    JOIN colors b
    ON a.color != b.color
于 2013-01-07T12:22:59.297 に答える