2013-12-10 162 views
0

我有兩個表TAB1TAB2。我想在TAB2的特定列中插入數據。我想要插入上WHERE條件中必須提取的數據。如果有數據存在,則在TAB2中插入數據。如果不是,請在TAB2中插入空白從一個表數據插入數據到另一個表

這裏我只談論單列。我也插入一些其他數據。它可以作爲單個SQL查詢發生嗎?我正在使用Oracle。

這是我的演示代碼。我需要的是這樣的:

INSERT INTO TAB1('value1','value2',?) 

if exists(select king from TAB2 where queen='yash') 

    ?=select king from TAB2 where queen='yash' 

if not exists 
    ?='' 

TAB1TAB2都具有不同類型的列。

TAB1       TAB2 
--------      ----------------- 
col1 col2 col3 col4    col1 king Queen 
-----------------   ---------------- 

1 jan King Robin   1 Alex yash 
2 Feb King2 Hood    2 Jhon Shakthi 

現在我想在TAB1從TAB2與WHERE條件 像這樣的事情

insert into TAB1(col1,col2,col3,col4) 
     values(5,'MArch',King7, select king From TAB2 where Queen='yash') 

如果選擇國王從TAB2其中要如果沒有空值插入Queen='yash'回報'Alex'然後有插入數據必須插入。

Here Queen column is Unique column .. So you can expect single row data only. 

TAB1 and TAB2 having different column names and different column Types 
+0

這是什麼意思 「如果不在TAB2中插入空白」 –

+0

好的,你能給我們一些來自'TAB2'的樣本內容,以及你想在每種情況下插入到'TAB1'中嗎?當女王='yash''有多行時,應該發生什麼?如果有_no_行,如果這是真的,但表中有多個其他條目,會發生什麼?如果有多個條目,當它們中的一些具有匹配的值時會發生什麼,但不是全部? –

+0

我已編輯我的問題。 – Babel

回答

0

假設通過「插入空白」,你的意思是不要插入,你可能想看看做一個INSERT SELECT。

INSERT INTO TAB1(...) 
SELECT ... FROM TAB2 
WHERE ... 
+0

「TAB1」和「TAB2」中的字段不同。是否可以使用這種解決方案? – Babel

+0

@looser,是你可以插入它,'INSERT INTO tab1(col3,col4,..)SELECT col1,col2,.. FROM TAB2 WHERE '。但請確保數據類型相同。 – Dba

+0

TAB1中「value1」和「Value2」的值是多少?它是否需要從TAB2插入這個列或它是否有一個默認值。 –

4
TAB2 
----------------- 
col1 king Queen 
---------------- 

    1 Alex yash 
    2 Jhon Shakthi 
    3 Fred Maya 

insert into TAB1(col1,col2,col3,col4, col5) 
     select 5, -- If you are tring to use an auto incremental value, I recommend you to use a trigger and Sequence on the table 
       'March', 
       'King7', 
       king , 
       col1 -- Col1 is used to get an Idea which row caused the Insert 
      From 
     TAB2 where Queen='yash'; 



TAB1       
--------------------------------   
col1 col2 col3 col4 col5   
--------------------------------   
5 March King7 Alex 1  

insert into TAB1(col1,col2,col3,col4, col5) 
     select 5, 
       'March', 
       'King7', 
       case when Queen='yash' then king else '' end, 
       col1 
      From 
     TAB2 ; 


--------------------------------   
col1 col2 col3 col4 col5   
--------------------------------   
5 March King7 Alex 1  
5 March King7 ''  2  
5 March King7 ''  3  

---- removing insert to Col5 column 
insert into TAB1(col1,col2,col3,col4) 
     select 
      distinct 
      5, 
       'March', 
       'King7', 
       case when Queen='yash' then king else '' end 
       From 
     TAB2 ; 

--------------------------   
col1 col2 col3 col4   
--------------------------   
5 March King7 Alex  
5 March King7 '' 

insert into TAB1(col1,col2,col3,col4) 
     select 
      distinct 
      5, 
      case when Queen='yash' then 'March' else '' end, 
      case when Queen='yash' then 'King7' else '' end, 
      case when Queen='yash' then king else '' end 
       From 
     TAB2 ; 

--------------------------   
col1 col2 col3 col4   
--------------------------   
5 March King7 Alex  
5 ''  ''  '' 
+0

我正在考慮第一例。 謝謝你的意思是..這裏的列'value1'是唯一的..和'SELECT'somevalue','somevalue',CASE WHEN queen ='yash'THEN king ELSE''END FROM tab2;'this one returns重複值..我已經使用'distinct' ..但仍然以某種方式我錯過了我的要求...就像'YASH'在那裏我有兩個記錄從'SELECT'somevalue','somevalue',CASE當女王='yash'那麼國王ELSE''結束 從tab2;'這個聲明。這裏TAB2中的女王專欄是獨一無二的...... – Babel

相關問題