在列中可以包含多个值的行

时间:2013-04-30 14:14:11

标签: sql stored-procedures

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

我有一张桌子:Table1(州,号码)

状态将需要为1-50,因为其值和数字为1-3。每个州的每个号码都需要有一行。

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

必须有一个很好的方法来做到这一点,但我的研究并不富有成效。有没有人有任何建议?

2 个答案:

答案 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

Fiddle