SQL: INSERT INTO ... ЦЕННОСТИ ... ВЫБРАТЬ - PullRequest
23 голосов
/ 13 мая 2009

Как мне написать оператор INSERT, если я получаю значения colA из TableX, colB из TableY и colC из TableZ?

например: INSERT INTO TableA (colA, colB, colC) ЗНАЧЕНИЯ (?,?,?)

Есть идеи, если это возможно?

Ответы [ 4 ]

38 голосов
/ 13 мая 2009
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).

Если вы не можете найти какую-либо связь между таблицами ВСЕ, вы также можете сделать три отдельных

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 выражении.

Марк

24 голосов
/ 13 мая 2009

В ответ на ответ marc_s вы можете запросить данные из не связанных таблиц, поскольку выберите как:

INSERT INTO TableA
    (colA, colB, colC)
SELECT
    (SELECT valA FROM TableX WHERE ...),
    (SELECT valB FROM TableY WHERE ...),
    (SELECT valC FROM TableZ WHERE ...)
4 голосов
/ 13 мая 2009
Insert into TableA (ColA, ColB, ColC) . . .

Должны быть имена столбцов, как в таблице А. Нет ничего плохого в

Insert into TableA (ColA, ColB, ColC) . . .
Select TableX.Col1, TableY.Col1, TableZ.Col5 
From TableX, TableY, TableZ
Where . . . 
0 голосов
/ 13 мая 2009

Вам нужно будет объединить таблицы, из которых вы хотите сделать выбор.

Вот ресурс по объединениям SQL:

www.w3schools.com / SQL / sql_join.asp

Вы также можете проверить эту бесплатную книгу в формате PDF у ребят по адресу www.simple-talk.com , которая охватывает основы SQL:

Справочник по шпаргалке SQL Server

...