我正在编写一个将行插入表中的存储过程。问题是许多列可以包含不同值的列表,并且db中的所有行都需要反映这些值。例如:
我有一张桌子:Table1(州,号码)
状态将需要为1-50,因为其值和数字为1-3。每个州的每个号码都需要有一行。
(1,1) (1,2) (1,3) (2,1)...等
必须有一个很好的方法来做到这一点,但我的研究并不富有成效。有没有人有任何建议?
答案 0 :(得分: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
答案 1 :(得分:0)
您需要的是两个表之间的交叉连接,一个包含50行,另外三个包含。
在Oracle中:
select *
from
(
select rownum as state
from dual
connect by rownum <= 50
) t1
,
(
select rownum as num
from dual
connect by rownum <= 3
) t2