0

我有一张桌子,例如:

PK FK Value1  value2 value3
1   1    3      2      5
2   2    5      3      6
4   1    9      null   5

我想要一个查询将所有行复制到结果表中,除了那些具有空值的行。

导致:

PK(above table) value(PK) 
1                  3    
1                  2    
1                  5
2                  5
2                  3
2                  6
4                  9 
4                  5
4

2 回答 2

2

一种方法是将其作为三个插入来完成,如果您需要操作的原子性,则由事务控制:

begin
insert into newtable (pk, value) select pk, value1 from oldtable
    where value1 is not null
insert into newtable (pk, value) select pk, value2 from oldtable
    where value2 is not null
insert into newtable (pk, value) select pk, value3 from oldtable
    where value3 is not null
commit

这当然是假设您在新表上的主键跨越列(我怀疑这是因为您的第二列也有pk)。如果它只是 on pk,则任何解决方案都不会起作用,因为您将违反主键约束。

你也可以作为一个工会来做:

insert into newtable (pk, value)
    select pk, value1 from oldtable where value1 is not null
    union select pk, value2 from oldtable where value2 is not null
    union select pk, value3 from oldtable where value3 is not null
于 2013-03-19T11:00:13.210 回答
1

你可以写下面的查询来实现这一点

INSERT INTO TABLE2 (SELECT ID,VALUE1 FROM table1);
INSERT INTO TABLE2 (SELECT ID,VALUE2 FROM table1);
INSERT INTO TABLE2 (SELECT ID,VALUE3 from table1);

如果您需要单一查询,那么您可以使用

INSERT INTO TABLE2 (SELECT ID,COLUMN1 FROM table1 UNION SELECT ID,COLUMN2 FROM table1 UNION SELECT ID,COLUMN3 from table1)
于 2013-03-19T11:04:12.713 回答