2011-05-04 32 views
17

我是新来的sql,所以也许这是一个愚蠢的问题,但有没有可能使用插入到With子句?或者有什么共同的解决方法?我的意思是这样的:Oracle SQL插入到与条款

With helper_table As (
Select * From dummy2 
) 
Insert Into dummy1 Values (Select t.a From helper_table t Where t.a = 'X'); 

Thx!

我的例子太虚拟了,所以我添加了一些扩展的代码(thx为迄今为止的答案)。

INSERT 
INTO dummy values (a,b) //more values 
WITH helper_table AS 
    (
    SELECT * 
    FROM dummy2 
    ) 
WITH helper_table2 AS //from more tables 
    (
    SELECT * 
    FROM dummy3 
    )   
SELECT t.value as a, t2.value as b 
FROM helper_table t 
join helper_table t2 on t.value = t2.value //some join 
WHERE t.value = 'X' and t2.value = 'X' //other stuff 

回答

28

你可以使用尽可能多的 'helper_tables' 如你所愿。记住

create table t(helper1 varchar2(50) , helper2 varchar2(50) , dataElement varchar2(50)); 


insert into t(helper1, helper2, dataelement) 
with 
    de as(select level lvl from dual connect by level <10) 
    ,h1 as (select lvl, lvl/1.5 hp from de) 
    ,h2 as (select lvl, lvl/2 hp2 from de) 
select h1.hp , h2.hp2, de.lvl 
    from de 
     inner join 
     h1 on de.lvl = h1.lvl 
     inner join 
     h2 on de.lvl = h2.lvl 
/

有了这个,你可以通过正常连接表主表

+0

Thx,它工作正常! :) – user2424380 2011-05-04 15:48:26

+0

临时表可以完成同样的事情吗?例如,使用“create table #t ...”而不是“create table t ...”。我有一个相当复杂的查询,我需要做的,其中的一部分需要不仅仅是立即查询,这就是为什么我需要临时表,但我不想永久写任何东西。谢谢! – 2012-01-12 06:52:20

+0

@MikeWilliamson自#t(临时表),因为您已经描述过它是SQL Server临时表,这是一个oracle表。我可以证明上述语句可以在oracle全局临时表中工作,但这是与SQL Server临时表不同的。我只能推荐你尝试一下,如果上面的语法在SQL Server中适用于普通表插入,我希望它的工作原理相同(注意“期待”并不意味着它会,我也没有尝试过!) – Harrison 2012-01-14 14:21:20

5
INSERT 
INTO dummy1 
WITH helper_table AS 
     (
     SELECT * 
     FROM dummy2 
     ) 
SELECT t.a 
FROM helper_table t 
WHERE t.a = 'X' 
+0

做所有的加盟,我认为我的例子是太假。我有很多值,我想为每个值使用不同的帮助表。有没有灵魂吗? Thx并对不起! – user2424380 2011-05-04 15:01:02

+0

@用户:请发布一些示例数据和预期输出。 – Quassnoi 2011-05-04 15:03:02

+0

扩展代码添加到原始 – user2424380 2011-05-04 15:21:03

4

你可以做这样的事情

INSERT INTO dummy1 
    WITH helper_table AS (
    SELECT * 
     FROM dummy2 
    ) 
    SELECT t.a 
    FROM helper_table t 
    WHERE t.a = 'X'; 

为您更新的查询

INSERT 
INTO dummy values (a,b) //more values 
WITH helper_table AS 
    (
    SELECT * 
    FROM dummy2 
    ), 
     helper_table2 AS //from more tables 
    (
    SELECT * 
    FROM dummy3 
    )   
SELECT t.value as a, t2.value as b 
FROM helper_table t 
join helper_table t2 on t.value = t2.value //some join 
WHERE t.value = 'X' and t2.value = 'X' //other stuff