2012-04-17 59 views
14

我想插入N行都是相同的,除了其中一個值是不同的。具體來說,這是我想要的:Oracle SQL - 用一條語句向表中插入多行?

insert into attribute_list (id,value,name) 
values 
(
select (id,'Y','is_leveled') from value_list where val >= 50 
); 

因此,對於val> = 50的每個值,我都會在attribute_list中插入一行。這可以用一個插入語句來完成,或者我應該手動在Excel中生成這些插入?

(注:這是一個熟例如簡化爲澄清這一問題,所以沒有必要攻擊這個具體案件的needlessness)

+0

所以,如果在VALUE_LIST多行對同一ID有值> = 50,你是想出馬行attribute_list中的id是什麼? – 2012-04-17 19:41:00

+0

@ShannonSeverance酷問題。我假設,如果我只想要它,只要選擇具有子選擇的唯一ID。 – Jeremy 2012-04-17 21:38:51

+1

或'選擇不同的ID,'Y','is_leveled'從....' – 2012-04-17 22:41:35

回答

22

您絕對可以做到這一點在一條語句!

試試這個:

INSERT INTO attribute_list (id, value, name) 
SELECT id, 'Y', 'is_leveled' 
FROM value_list WHERE val >= 50 
+0

美麗,謝謝! – Jeremy 2012-04-17 21:32:06

1

你可以做一個SELECT ... INTO,如果你可以查詢數據。否則,創建數據你需要使用PL/SQL

如果你有數據,那麼嘗試:

select id,'Y','is_leveled' 
INTO attribute_list 
from value_list where val >= 50 
4

這就是FOR loops是。

DECLARE 
    x NUMBER := 100; 
BEGIN 
    FOR i IN 1..10 LOOP 
     IF MOD(i,2) = 0 THEN  -- i is even 
     INSERT INTO temp VALUES (i, x, 'i is even'); 
     ELSE 
     INSERT INTO temp VALUES (i, x, 'i is odd'); 
     END IF; 
     x := x + 100; 
    END LOOP; 
    COMMIT; 
END; 
+0

我認爲這錯過了這個問題的重點。它插入多個值,但不包含單個語句。 – MJB 2012-07-24 14:13:51

+0

我認爲這一行爲真實事物插入方便的簡寫:循環。無論如何,只要事情變得輕微有趣,就必須循環。 – nes1983 2012-07-25 09:59:57

2

您需要SELECT的INSERT。要做到這一點,你應該忽略VALUES,只是做:

insert into attribute_list (id,value,name) 
select (id,'Y','is_leveled') from value_list where val >= 50; 

下面是一個例子:http://psoug.org/reference/insert.html