2017-02-11 6 views
0

デカルト結合またはクロス結合を使用せずに、2つのテーブルにすべての可能な組み合わせを出力したい。これは可能ですか?デカルトおよびクロス結合の代替

+6

すべての可能な組み合わせが** **デカルト積の定義です。明示的なクロス結合または暗黙的な結合を使用できますが、結果は同じになります。 –

+1

----------なぜですか? ---------- –

+0

クロス結合を使用せずにすべての組み合わせを取得できますか?誰かによると、その高すぎる。 – user7414008

答えて

1

すべての可能な組み合わせは、デカルト製品の定義です。

2つのテーブルからデカルト積を得るための3つの選択肢があります。 すべての3の選択肢は、最終的にはクロスに帰着参加(と実行計画は、すべての3のために同じである):

作成し、移入したサンプルのテーブル:

CREATE TABLE t1 
(
    int_col int 
) 

CREATE TABLE t2 
(
    char_col char(1) 
) 

INSERT INTO t1 VALUES 
(1), (2), (3), (4), (5), (6), (7), (8), (9), (10) 

INSERT INTO t2 VALUES 
('a'), ('b'), ('c'), ('d'), ('e'), ('f'), ('h'), ('i'), ('j'), ('k') 

クエリ:

暗黙のクロス参加:

SELECT * 
FROM t1, t2 

明示的なクロスが参加:

SELECT * 
FROM t1 
CROSS JOIN t2  

クロスが適用されます。

SELECT * 
FROM t1 
CROSS APPLY t2 

すべての結果が同じである:

int_col  char_col 
1   a 
2   a 
3   a 
4   a 
5   a 
6   a 
7   a 
8   a 
9   a 
10   a 
1   b 
2   b 
3   b 
4   b 
5   b 
6   b 
7   b 
8   b 
9   b 
10   b 
1   c 
2   c 
3   c 
4   c 
5   c 
6   c 
7   c 
8   c 
9   c 
10   c 
1   d 
2   d 
3   d 
4   d 
5   d 
6   d 
7   d 
8   d 
9   d 
10   d 
1   e 
2   e 
3   e 
4   e 
5   e 
6   e 
7   e 
8   e 
9   e 
10   e 
1   f 
2   f 
3   f 
4   f 
5   f 
6   f 
7   f 
8   f 
9   f 
10   f 
1   h 
2   h 
3   h 
4   h 
5   h 
6   h 
7   h 
8   h 
9   h 
10   h 
1   i 
2   i 
3   i 
4   i 
5   i 
6   i 
7   i 
8   i 
9   i 
10   i 
1   j 
2   j 
3   j 
4   j 
5   j 
6   j 
7   j 
8   j 
9   j 
10   j 
1   k 
2   k 
3   k 
4   k 
5   k 
6   k 
7   k 
8   k 
9   k 
10   k 
1

私は出力にデカルトを使用しない2つのテーブル内のすべての可能な組み合わせをしたいが参加したり、クロスが参加します。これは可能ですか?

厳密な定義レベルでは、できません。どうして?デカルト積の定義は、まさにあなたが記述しているものです(「デカルト結合」という用語はよく使われませんが、「デカルト積」と同義です)。したがって、使用する方法はこの機能を実装することです。通常、この機能はCROSS JOINを使用して実装されています(まれに、,を使用することを認めます)。

+ 1を実行せずに番号に1を加える」と言う場合があります。他の誰かが来て、 "+ 2 - 1を使う"と言う。それは1つを追加することですが、1つではなく2つの操作を使用するだけです。あなたはデカルト積をしたいが、あなたはCROSS JOIN演算子を使用したくない場合は

は、最も一般的な方法はON 1=1使用しています:

select t1.*, t2.* 
from t1 join 
    t2 
    on 1 = 1; 
関連する問題