2つの一時テーブル#aと#bがあり、どちらも整数値で埋められています。両方に値が1〜10の10行が含まれているとします。
aとbの可能なすべての組み合わせを含む3番目の一時テーブル#cを作成したいと思います。したがって、(1,1)、(1,2)...(10、10)の合計100行になります。SQLでこれを行うにはどうすればよいですか。私が使用している実装はSQLServer2012です。
2つの一時テーブル#aと#bがあり、どちらも整数値で埋められています。両方に値が1〜10の10行が含まれているとします。
aとbの可能なすべての組み合わせを含む3番目の一時テーブル#cを作成したいと思います。したがって、(1,1)、(1,2)...(10、10)の合計100行になります。SQLでこれを行うにはどうすればよいですか。私が使用している実装はSQLServer2012です。
クロスジョインはすべての組み合わせを取得します
SELECT a.Col
, b.Col
FROM TableA a
CROSS JOIN TableB b
私はあなたがただできると思います
SELECT * INTO #c FROM #a,#b
BEGIN
DECLARE @a TABLE(x INT)
DECLARE @b TABLE(x INT)
INSERT INTO @a VALUES (1), (2)
INSERT INTO @b VALUES (1), (2)
select * from @a,@b
END
ここには確かに他の正しい答えがありますが、質問に完全に答えるために、それらの最良の要素を一緒に追加します。
select a.Col as ColA -- Give the columns a name for the destination
, b.Col as ColB
into #c -- Generates destination temp table #c
from #a as a
cross join #b as b -- Cross join is the preferred syntax
order by a.Col, b.Col -- Optional but often helpful (aesthetic, identities, indexing, etc)
そうです、デカルト積が必要な場合は、cross joinを使用してください。