【问题标题】:Insert data from one table data to another table将数据从一个表数据插入到另一个表
【发布时间】:2013-12-10 08:42:28
【问题描述】:

我有两张桌子TAB1TAB2。我想在特定列的TAB2 中插入数据。我想在WHERE 条件下插入必须从TAB1 获取的数据。如果存在 fethced 数据,则在 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

现在我想用 where 条件从 TAB2 向 TAB1 中插入数据 像这样的

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

如果 select king From 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

【问题讨论】:

  • “如果不在 TAB2 中插入空白”这句话是什么意思
  • 好的,你能给我们一些来自TAB2的示例内容,以及你想在每种情况下插入TAB1的内容吗?当queen = 'yash' 有多行时应该发生什么?如果存在 no 行,但该表有多个其他条目,会发生什么情况?如果有多个条目,当其中一些具有匹配值但不是全部时会发生什么?
  • 我已经编辑了我的问题..

标签: sql oracle


【解决方案1】:
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   ''     ''     ''  

【讨论】:

  • 我正在考虑第一种情况。谢谢你是有道理的..这里的'value1'列是唯一的..SELECT 'somevalue' , 'somevalue' , CASE WHEN queen ='yash' THEN king ELSE '' END FROM tab2;这个返回重复值..为此我使用了distinct..但不知何故我还是错过了我的要求......好像YASH 在那里我有两条来自SELECT 'somevalue' , 'somevalue' , CASE WHEN queen ='yash' THEN king ELSE '' END FROM tab2; 这个语句的记录。这里 TAB2 中的 Queen 列是唯一的...
【解决方案2】:

假设“插入空白”是指不进行插入,您可能希望考虑进行 INSERT SELECT。

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

【讨论】:

  • TAB1TAB2 中的字段不同.. 你的解决方案可行吗?
  • @looser,是的,您可以将其插入为 INSERT INTO tab1(col3, col4, ..) SELECT col1, col2, .. FROM TAB2 WHERE <condition>。但请确保数据类型相同。
  • TAB1 中“value1”和“Value2”的值是多少。这些列是需要从 TAB2 插入还是一些默认值。
  • 嗨,您可以尝试使用 INSERT INTO (COLUMNS) SELECT FROM WHERE 。它只会包括那些满足条件的记录。谢谢
  • @GunjanShakya value1value2 是不同的值。这些不是TAB2 的形式,只有valueX来自TAB2
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-05
  • 2015-10-08
  • 2014-10-15
  • 1970-01-01
  • 2013-01-10
  • 2013-04-25
相关资源
最近更新 更多