2016-04-05 15 views
1

テーブルに複数の行を挿入しようとしています。これらの行の値のほとんどは、同じテーブルの別のレコードセットと一致します。したがって、複数の行を挿入する複数のSELECT文を含む単一のINSERT文を書くことができるのは不思議です。このようなもの:複数のSELECT文でINSERT INTOを使用する

INSERT INTO table (col1, col2, col3, col4) 

SELECT (newRecordID, col2, col3, col4) 
FROM table WHERE col1 = oldRecordID AND col4 = 0 
SELECT (newRecordID, col2, col3, col4) 
FROM table WHERE col1 = oldRecordID AND col4 = 1 
SELECT (newRecordID, col2, col3, col4) 
FROM table WHERE col1 = oldRecordID AND col4 = 2 
SELECT (newRecordID, col2, col3, col4) 
FROM table WHERE col1 = oldRecordID AND col4 = 3 

これは可能ですか?最後に、同じNewRecordIDを持つ4行、col4値0〜3、および同じテーブルの対応するOldRecordIDから取得された他のcol値を挿入する必要があります。私がそれを実行すると、最初のINSERT SELECT文が実行され、次に他のSELECT文が実行されます。私はこれらを接続する際に何かを逃していますか私は常に複数回それを実行し、毎回値を変更することができますが、私はそれを回避する方法があるのだろうかと思っています。私は感謝し、助けて、または役に立つヒント。あなたが1つのレコードにそれらを結合連合と接続することができ

おかげ

答えて

0

INSERT INTO table (col1, col2, col3, col4) 

SELECT (newRecordID, col2, col3, col4) 
FROM table WHERE col1 = oldRecordID AND col4 = 0 
union 
SELECT (newRecordID, col2, col3, col4) 
FROM table WHERE col1 = oldRecordID AND col4 = 1 
union 
SELECT (newRecordID, col2, col3, col4) 
FROM table WHERE col1 = oldRecordID AND col4 = 2 
union 
SELECT (newRecordID, col2, col3, col4) 
FROM table WHERE col1 = oldRecordID AND col4 = 3 
+2

いいえ、これは必ずしも同じことを行うことはありません - これは、重複を排除します。重複を排除することを知っていない限り、 'UNION ALL'を提案してください。 –

+0

ありがとう!これはうまくいきました。私は、ABが提案したUNION ALLステートメントを使用しました。私は最終的にはRicardo Cのソリューションを使いましたが、これも素晴らしいものでした。私は迅速な対応に感謝します! – jlarson497

1
INSERT INTO table (col1, col2, col3, col4) 

SELECT (newRecordID, col2, col3, col4) 
FROM table WHERE col1 = oldRecordID AND col4 IN(0,1,2,3) 
+0

驚くばかり!これはうまくいった。私はUNION ALLソリューションを使用して終了しました。これは、すでにSELECTステートメントがまとめられているからです。それから、私は新しいエントリーを削除し、この方法でも試しました。おそらくこのソリューションに固執します。スペースを少しだけ節約します。ありがとう! – jlarson497

+0

@ jlarson497喜んで助けてください。あなたが私のものかアーロン博士のものかを選んだか、答えとして受け入れることを忘れてしまった;) –

関連する問題