2011-05-04 65 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