简化的交叉连接?

时间:2011-04-28 14:59:57

标签: tsql

让我们坐下来我有一个带有行的表'A':

A
B
C
D

是否有一种简单的方法可以进行创建

的交叉连接
A  1
A  2
A  3
A  4
...
D  1
D  2
D  3
D  4

没有创建第二个表?

类似的东西:

SELECT *
FROM A
  CROSS JOIN (1,2,3,4)

3 个答案:

答案 0 :(得分:1)

类似的东西应该有效,我想

select * from A cross join (select 1 union all select 2 union all select 3 union all select 4) as tmp

你将创建第二个表,但你不会坚持它。

答案 1 :(得分:1)

以下适用于任何大小的表(尽管我只测试了6行)。它使用SQL Server 2005及更高版本中提供的排名功能,但这个想法应该适用于任何RDBMS。

SELECT ta.SomeColumn, cj.Ranking
 from TableA ta
  cross join (select row_number() over (order by SomeColumn) Ranking from TableA) cj
 order by ta.SomeColumn, cj.Ranking

答案 2 :(得分:0)

您应该能够通过

实现这一目标
select * from A cross join
(select 1
  union all
 select 2
  union all
 select 3
  union all
 select 4)