问题描述:oracle中有一个表T,其中有三个字段:a b c,现在从外部数据源中提取一个数据与T表a字段已有的数据做比较,如果数据库中有记录,则不做操作,如果没有,则插入该数据。不知道描述清楚了没有,本人菜鸟,希望高手们多多指教。

解决方案 »

  1.   


    网上的例子是这样的:
    MERGE INTO T T1
    USING S T2
    ON (T1.a = T2.a)
    WHEN NOT MATCHED THEN
    INSERT
    VALUES (T2.a, T2.b,T2.c);
    但其中的S是数据库的另一张表,我现在已经从外部数据源中取到了数据,并不是来自另一张表,该如何处理?
      

  2.   


    正常我的数据库插入的语句是这样的:
    insert into T(a,b,c)values('s1','s2','s3')
    s1,s2,s3均为外部数据源,并不是来自于当前数据库的表中。如何实现条件插入?
      

  3.   

    merge into group_user g
    using (select 100 z1,202 z2 from dual) tb
    on(tb.z1=g.z1 and tb.z2=g.z2)
    when not matched then
    insert
    values (tb.z1,tb.z2)
      

  4.   

    using (select 100 z1,202 z2 from dual) tb这行代码是什么意思?
      

  5.   

    应该算是一个临时表
    表名是tb 有两列 z1,z2 一行 100,200
      

  6.   


    dual(tb)是临时表?不需要先在数据库里创建这个临时表吗?
      

  7.   

    create table A
    (
    a varchar(20),
    b varchar(20),
    c varchar(20)
    );
    create table T
    (
    a varchar(20),
    b varchar(20),
    c varchar(20)
    );insert into A values('1','2','3');
    insert into A values('2','2','3');
    insert into A values('3','2','3');
    insert into A values('4','2','3');
    insert into T values('1','2','3');
    insert into T values('2','2','3');
    insert into T values('5','2','3');
    insert into T values('6','2','3');select * from A;
    select  * from T;insert into A 
    (a,
     b,
     c
    )
    select t1.a,t1.b,t1.c from T t1 where t1.a not in (select a from A);
      

  8.   


    试验过这种方法了,会发生重复插入的情况,怎么回事?where语句没用么?
      

  9.   

    看下重复的记录是什么样的,是否插入之前就有的插入是有where条件的,只插入t.a not in (select a from A); 上面有测试数据,可以比对一下