2012-04-17 45 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