0

私は次のようなテーブルを持っています:

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

null値を持つ行を除いて、すべての行を結果のテーブルにコピーするクエリが必要です。

その結果:

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

1 つの方法は、操作に原子性が必要な場合、トランザクションによって制御される 3 つの挿入として行うことです。

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

もちろん、新しいテーブルの主キーが両方の列をまたいでいると仮定しています(2番目の列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 に答える