我有一张表如:
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
答案 0 :(得分: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
)。如果它只在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
答案 1 :(得分: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)