SQL:INSERT INTO ... VALUES..SELECT

时间:2009-05-13 08:11:17

标签: sql sql-server insert

如果我从TableX得到colA的值,从TableY得到colB,从TableZ得到colC,我怎么写INSERT语句?

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

任何想法是否有可能?

4 个答案:

答案 0 :(得分:38)

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声明表达所有内容。

马克

答案 1 :(得分:24)

为了回应marc_s的回答,您可以从以下选择中的不相关表中查询:

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

答案 2 :(得分:4)

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 . . . 

答案 3 :(得分:0)

您需要加入要进行选择的表格。

以下是SQL连接的资源:

www.w3schools.com/sql/sql_join.asp

您也可以查看www.simple-talk.com中涵盖SQL基础知识的人员的免费PDF手册:

SQL Server Crib Sheet Compendium