SQL: INSERT INTO...VALUES..SELECT SQL: INSERT INTO...VALUES..SELECT sql-server sql-server

SQL: INSERT INTO...VALUES..SELECT


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

Of course, TableX, TableY and TAbleZ might also be related in some other way (not INNER JOIN).

If you cannot find any relation between the tables AT ALL, you could also do three separate

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

and then an insert like this:

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

That's the ultimate last resort, you can can't express everything in a single SELECT statement.

Marc


In response to marc_s's answer, you can query from unrelated tables in a since select like:

INSERT INTO TableA    (colA, colB, colC)SELECT    (SELECT valA FROM TableX WHERE ...),    (SELECT valB FROM TableY WHERE ...),    (SELECT valC FROM TableZ WHERE ...)


Insert into TableA (ColA, ColB, ColC) . . .

Must be the column names as the are in Table A.There's nothing wrong with

Insert into TableA (ColA, ColB, ColC) . . .Select TableX.Col1, TableY.Col1, TableZ.Col5 From TableX, TableY, TableZWhere . . .