2011-11-30 44 views
3

我想在表中插入記錄時使用聯合查詢。插入也有一些硬編碼值。其餘的價值來自工會。 如..我想從使用union的select語句插入ALL

INSERT INTO my_test_one (name, sirname, Dept) 
VALUES 
    ((select 'name1','sirname1', Dept FROM my_test_one_backup WHERE dept = 500 
    union all 
    select 'name1','sirname1', Dept FROM my_test_one_backup WHERE dept = 501)); 

回答

2

我認爲你需要在這裏沒有VALUES。 (INSERT INTO ... (...) SELECT ...

+0

感謝確切的答案.. :) –

+0

不客氣:) –

3

嘗試:

INSERT INTO my_test_one (name, sirname, Dept) 
(select 'name1','sirname1', Dept 
    FROM my_test_one_backup 
    WHERE dept = 500  
UNION ALL 
select 'name1','sirname1', Dept 
    FROM my_test_one_backup 
    WHERE dept = 501); 

希望它可以幫助...

+0

謝謝..它確實..卸下值事情做的伎倆.. –

+0

+1括號是關鍵...... –

+1

@Jaimie F:括號不是造成這裏的區別。它刪除了'values'關鍵字,該關鍵字僅在插入靜態值時使用,而不是來自select語句的值。 – Allan

0

你可以這樣說:

如果表不存在,你可以使用這個:

SELECT 'name1' [name],'sirname1' [sirname], Dept INTO my_test_one FROM my_test_one_backup WHERE dept = 500 
UNION ALL 
SELECT 'name1','sirname1', Dept FROM my_test_one_backup WHERE dept = 501 

否則使用這個:

INSERT INTO my_test_one (name, sirname, Dept) 
SELECT 'name1','sirname1', Dept FROM my_test_one_backup WHERE dept in (500,501) 
+1

插入的地方在哪裏? – Fred

+0

@fred在'my_test_one'中,你可以測試它:) –

+4

如果'my_test_one'不存在,這將工作。然而,OP似乎想插入到現有的表中。 –

1

爲什麼不使用兩個插入而不是使用union all?

INSERT INTO my_test_one (name, sirname, Dept) 
SELECT 'name1','sirname1', Dept FROM my_test_one_backup WHERE dept = 500; 

INSERT INTO my_test_one (name, sirname, Dept) 
SELECT 'name1','sirname1', Dept FROM my_test_one_backup WHERE dept = 501; 

INSERT INTO my_test_one (name, sirname, Dept) 
SELECT 'name1','sirname1', Dept FROM my_test_one_backup WHERE dept in (500,501);