SQL: INSERT INTO... VALUES..SELECT
Как написать инструкцию INSERT, если я получаю значения colA из TableX, colB из TableY и colC из TableZ?
например: INSERT INTO TableA (colA, colB, colC) VALUES (?,?,?)
Любые идеи, если это возможно?
Ответы
Ответ 1
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
.
Марк
Ответ 2
В ответ на ответ marc_s вы можете запрашивать из несвязанных таблиц в после выбора, например:
INSERT INTO TableA
(colA, colB, colC)
SELECT
(SELECT valA FROM TableX WHERE ...),
(SELECT valB FROM TableY WHERE ...),
(SELECT valC FROM TableZ WHERE ...)
Ответ 3
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
Вам нужно будет присоединиться к таблицам, из которых вы хотите сделать выбор.
Вот ресурс по SQL-соединениям:
www.w3schools.com/sql/sql_join.asp
Вы также можете проверить эту бесплатную книгу в формате PDF от ребят в www.simple-talk.com, которая охватывает основы SQL:
Сборник листинга SQL Server Crib