web-dev-qa-db-ja.com

SQL:INSERT INTO ... VALUES..SELECT

TableXからcolA、TableYからcolB、TableZからcolCの値を取得した場合、どのようにINSERTステートメントを記述すればよいですか?

例:INSERT INTO TableA(colA、colB、colC)VALUES(?、?、?)

可能であればアイデアはありますか?

23
jenn
INSERT INTO TableA(colA, colB, colC)
  SELECT TableX.valA, TableY.valB, TableZ.valC
    FROM TableX
   INNER JOIN TableY ON :......
   INNER JOIN TableZ ON ........

もちろん、TableX、TableY、およびTAbleZは(INNER JOINではなく)他の方法で関連付けられている場合もあります。

テーブル間の関係を見つけることができない場合AT ALL、

SELECT @value1 = valA FROM TableX WHERE ......
SELECT @value2 = valB FROM TableY WHERE ......
SELECT @value3 = valC FROM TableZ WHERE ......

そして、このような挿入:

INSERT INTO TableA(colA, colB, colC)
             VALUES(@value1, @value2, @value3)

これが最終的な最終手段です。単一のSELECTステートメントですべてを表現することはできません。

マーク

39
marc_s

Marc_sの回答に応じて、次のようなselectの関係のないテーブルからクエリを実行できます。

INSERT INTO TableA
    (colA, colB, colC)
SELECT
    (SELECT valA FROM TableX WHERE ...),
    (SELECT valB FROM TableY WHERE ...),
    (SELECT valC FROM TableZ WHERE ...)
24
Andomar
Insert into TableA (ColA, ColB, ColC) . . .

表Aにあるような列名でなければなりません。何も問題はありません。

Insert into TableA (ColA, ColB, ColC) . . .
Select TableX.Col1, TableY.Col1, TableZ.Col5 
From TableX, TableY, TableZ
Where . . . 
4
Binary Worrier

選択するテーブルを結合する必要があります。

SQL結合に関するリソースは次のとおりです。

www.w3schools.com/sql/sql_join.asp

また、SQLの基本をカバーするこの無料のPDF本からの本 www.simple-talk.com もご覧ください):

SQL Server Crib Sheet Compendium

0
lexx