2013-04-15 56 views
0

如何从表1选择多列,并插入到表2中的多行,如果该值不为空1个表中选择多发柱插入到另一个表的多个行

create table table2 
(
label_id NUMBER(4), 
level_name VARCHAR2(20) 
); 

create table table1 
(
level_name VARCHAR2(20), 
class_name1 VARCHAR2(20), 
class_name2 VARCHAR2(20), 
class_name3 VARCHARS2(20) 
) 


create table table2 
(
    level_id NUMBER(4), 
    class_name VARCHAR2(20) 
) 

data in table0 
1, k1 
2, k2 

data in table1 
k1, roomA5, roomA6, roomA7 
k2, roomB1, roomB2 

the result table2 
1, roomA5 
1, roomA6 
1, roomA7 
2, roomB1 
2, roomB2 

我可能需要添加其他表2中的列使其正确。也许表2应该是(level_id,ROOM_ID,CLASS_NAME)

非常感谢你对任何帮助

回答

0

尝试用:

insert into Table2 t2 
( 
    Level_Id, 
    Class_Name 
)select 
    t0.Level_Id, 
    t1.Class_Name1 
from Table0 t0 
inner join Table1 t1 on t1.level_name = t0.level_name 

每一类做吧,只是必须Class_Name2替换Class_Name1。

0

下面是如何做到这一点,如果你联合每个类名列的所有3个选择语句,这很简单。

insert into table2 
    select a.level_id, b.classname1 
    from table0 a 
    join table1 b on a.level_name = b.level_name 
    where b.classname1 is not null 
union all 
    select a.level_id, b.classname2 
    from table0 a 
    join table1 b on a.level_name = b.level_name 
    where b.classname2 is not null 
union all 
    select a.level_id, b.classname3 
    from table0 a 
    join table1 b on a.level_name = b.level_name 
    where b.classname3 is not null 
+0

@bluefeet会做一个选择和一个关键点,但我不认为这是值得的。 – Hogan

0

你看过unpivot命令吗?

http://www.oracle.com/technetwork/articles/sql/11g-pivot-097235.html

当然,这是假设你正在使用Oracle 11g,这是在这一点上的假设。

insert into table2 
select * 
    from table1 
unpivot 
(
    level_name 
    for class_name in ("class_name1","class_name2","class_name3") 
) 
order by "Puchase Frequency", state_code 

我没有要测试的数据库,但这可能有所帮助。这似乎是一个干净的方式来做到这一点。