2015-08-16 67 views
-1

下面的代码显示了行SELECT语句中的错误2.INSERT INTO创建的表引发错误

INSERT INTO (SELECT A.Column1, B.Column2 
      FROM Table1 A 
      LEFT JOIN Table2 B ON A.Id = B.Id) AB 
    SELECT Column1, Column2 
    FROM ExtraData C 

我想在这里做的是 - 我有2个表,A和B ,需要连接(制作表格AB),然后连接到这个连接表格,我必须添加一些额外的行,它们出现在C

如果我在INSERT INTO之前为表格AB创建临时表格似乎工作正常。

INSERT有这样的限制吗?

+2

是的,你不能在'Sql Server中做到这一点'。我不知道哪个RDBMS支持这种形式。正如你所提到的,你需要创建两列“temp”表。 –

+1

你在'insert'语句中缺少表名。你想做什么? –

+0

@戈登 - 我没有在选择语句结尾将新表命名为AB? – Vamsi

回答

1

你不能在SQL Server中这样做。我不知道RDBMS支持这种语法,甚至不知道你期望的输出。

有两种方法将数据插入临时表。您已经发现第一个是CREATE TABLE #AB (...),然后是INSERT INTO #AB

第二种方法是使用SELECT ... INTO

SELECT A.Column1, B.Column2 
INTO #AB 
FROM Table1 A 
LEFT JOIN Table2 B 
ON A.Id = B.Id 

-- Now that #AB is defined, you can use INSERT INTO to add additional data 
INSERT INTO #AB (Column1, Column2) 
    SELECT Column1, Column2 
    FROM ExtraData C 
1

如果你想创建一个表叫AB,使用select into

SELECT Column1, Column2 
INTO AB 
FROM ExtraData C; 

目前还不清楚到底是什么你正在尝试做的,但是。

如果是这样的话,那么使用union all

SELECT A.Column1, B.Column2 
INTO AB 
FROM Table1 A LEFT JOIN 
    Table2 B 
    ON A.Id = B.Id 
UNION ALL 
SELECT Column1, Column2 
FROM ExtraData C; 

如果你已经有了表中定义,然后执行:

INSERT INTO AB(column1, column2)  
    SELECT A.Column1, B.Column2 
    FROM Table1 A LEFT JOIN 
     Table2 B 
     ON A.Id = B.Id 
    UNION ALL 
    SELECT Column1, Column2 
    FROM ExtraData C; 
+0

我有2个表需要连接(使表AB),然后到这个连接的表,我必须添加一些额外的行存在于C – Vamsi

+0

您的SQL顶部不显示您选择的东西成。这是我猜测第2行的语法错误。除此之外,您只需在两个数据源之间添加联合,如本例中所示 –

0
INSERT INTO SomeTable 
SELECT A.Column1, B.Column2 
FROM Table1 A 
LEFT JOIN Table2 B 
ON A.Id = B.Id 
UNION 
SELECT Column1, Column2 
FROM ExtraData C