0

我正在编写一个将行插入表中的存储过程。问题是许多列可以有一个不同值的列表,并且数据库中的所有行都需要反映这些值。例如:

我有一张桌子:Table1(状态,数字)

state 需要为 1-50,因为它的值和数字是 1-3。每个州都需要有一行,每个数字都有。

(1,1) (1,2) (1,3) (2,1)...等

必须有一个很好的方法来做到这一点,但我的研究并没有取得成果。有没有人有什么建议?

4

2 回答 2

3

生成值的一个好方法是使用cross join. 这是一个例子:

insert into table(state, number)
      select s.state, n.number
      from (select 'AK' as state union all select 'AL'  union all . . .
           ) s cross join
           (select 1 as number union all select 2 union all select 3
           ) n

您可能已经有一个状态和/或数字列表,在这种情况下您可以使用它。例如:

insert into table(state, number)
      select s.state, n.number
      from (select state from states
           ) s cross join
           (select 1 as number union all select 2 union all select 3
           ) n
于 2013-04-30T14:18:06.577 回答
0

您需要的是两个表之间的交叉连接,一个包含 50 行,另一个包含 3 行。

在甲骨文中:

select *
from
(
  select rownum as state
  from dual
  connect by rownum <= 50
) t1
, 
(
  select rownum as num
  from dual
  connect by rownum <= 3
) t2

小提琴

于 2013-04-30T14:22:45.077 回答