我正在编写一个将行插入表中的存储过程。问题是许多列可以有一个不同值的列表,并且数据库中的所有行都需要反映这些值。例如:
我有一张桌子:Table1(状态,数字)
state 需要为 1-50,因为它的值和数字是 1-3。每个州都需要有一行,每个数字都有。
(1,1) (1,2) (1,3) (2,1)...等
必须有一个很好的方法来做到这一点,但我的研究并没有取得成果。有没有人有什么建议?
我正在编写一个将行插入表中的存储过程。问题是许多列可以有一个不同值的列表,并且数据库中的所有行都需要反映这些值。例如:
我有一张桌子:Table1(状态,数字)
state 需要为 1-50,因为它的值和数字是 1-3。每个州都需要有一行,每个数字都有。
(1,1) (1,2) (1,3) (2,1)...等
必须有一个很好的方法来做到这一点,但我的研究并没有取得成果。有没有人有什么建议?
生成值的一个好方法是使用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
您需要的是两个表之间的交叉连接,一个包含 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