mytable 表机构
id,name1,name2
--我想插入的时候,如果id=1且name1=‘张三’不存在的时候才插入
 insert into mytable values(1,'张三','') where?--条件如上的时候不插入

解决方案 »

  1.   

    建个临时表,用merge into来处理
      

  2.   

    insert into mytable
    select 1,'张三','' from dual 
    where (select count(*) from mytable where **='张三')=0
      

  3.   

    插入后面加where条件--
             至于这样么。。
                   如果要那样的话  先从表里面查出是否存在id=1 name1='张三'的数据
                        没有就插入  有的话就不做
      

  4.   


    insert into mytable select 1,'张三','' from dual where (select nvl(count(1),0) from mytable where name1='张三')<=0
      

  5.   


    insert into mytable values(1,'张三','') 
    where (select 1 from mytable where id = 1 and name = '张三')=0 
      

  6.   

    SQL> SELECT * FROM test ;
     
      A    B
    --- ----
     14    0
     
    SQL> 
    SQL> INSERT INTO test
      2  SELECT 14,0 FROM dual WHERE (SELECT COUNT(*) FROM test WHERE a=14)=0
      3  ;
     
    0 rows inserted
     
    SQL> 
      

  7.   

    SQL> SELECT * FROM test ;
     
      A    B
    --- ----
     14    0
     
    SQL> 
    SQL> INSERT INTO test
      2  SELECT 14,0 FROM dual WHERE (SELECT COUNT(*) FROM test WHERE a=14)=0
      3  ;
     
    0 rows inserted
     
    SQL> 
    注意是0 rows inserted 
      

  8.   

    当然用merge是最好的
    SQL> SELECT * FROM test ;
     
      A    B
    --- ----
     14    0
     
    SQL> 
    SQL> merge into test a
      2      using (select 14 a,0 b from dual)b
      3      on (a.a=b.a)
      4      when not matched then insert (a.a,a.b)values(b.a,b.b);
     
    DoneSQL> select * from test;
     
      A    B
    --- ----
     14    0
     
    SQL>
      

  9.   

    各位同志们,大家好,麻烦大家试试如果id=1 and name1='',看看能不能插入。我测试能反复插入,但是如果id=1 and name='张三' 是不能反复插入的。
      

  10.   

    谢谢。我才知道有merge语句。