2015-08-16 38 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