因为项目需要使用mysql,之前不太用,一直用的是sqlserver2005
所以写的语法很多都不对
查了很久没明白
在sqlserver中 if not exists (select * from TABLE2) insert into TABLE(XXXX) values(XXXX)
转换成mysql的语法要怎么去写
还有
怎么样能够正确的使用exists
说说你的见解
但不要仅仅只是给个转帖的地址

解决方案 »

  1.   

    示例
    SQL语句中:
    SELECT *,IF(NOT EXISTS (SELECT 1 FROM `goods` WHERE gid=2),2,1 ) FROM `goods`
    SP中:
    DELIMITER $$
    CREATE PROCEDURE dd()
    BEGIN 
    IF NOT EXISTS (SELECT * FROM TABLE2) THEN 
    INSERT INTO `TABLE`(XXXX) VALUES(XXXX);
    END IF;
    END$$
    DELIMITER ;
      

  2.   

    insert into TABLE(XXXX) select distinct XXXX from TABLE2
    where not exists (select * from TABLE2) 
      

  3.   

    这样的语句mysql只能用在存储过程里面   不能像sqlserver一样直接执行 
      

  4.   

    你这个行吗?
    我也是使用了同样的方法
    但是报语法错误了啊
    mysql5.5的
      

  5.   

    不能吗?
    INSERT INTO `TABLE`(XXXX) SELECT DISTINCT XXXX FROM TABLE2
     WHERE NOT EXISTS (SELECT * FROM TABLE2)
    注意TABLE为保留字,加`,在5.5下测试通过
      

  6.   

    TABLE 是我故意这么写的
    为了避免一些不必要的麻烦
    我真实的表名字都是带有下划线的
    这个问题本来问的时候是由于需要进行不重复插入引起的
    以前用过mysql
    不过是几年前的事情了
    现在需要再用下
    可是sql却用不起来了
    我那边对于table2进行不重复插入失败了....
    不知道还有其他什么原因不
    你用什么客户端执行的这些语句
    截图我看看呢
      

  7.   

    不重复插入:设置主键、唯一索引均可
    insert into Tt(XXXX) select distinct XXXX from Tt2
     where not exists (select 1 from Tt2 where id=...)贴建表及插入记录的SQL,及要求结果出来看看
      

  8.   

    贴建表及插入记录的SQL,及要求结果出来看看
    如果表中有唯一索引
    考虑 INSERT IGNORE
      

  9.   

    举个例子而已,不需要知道我的表是怎么建立的建立一个很普通的表就可以了
    一个id,一些字段,其中id是主键
    要求只有一个
    你写一个可以防止重复添加的sql语句
    我不断的执行这个语句不报错,并且数据库中该条数据如果没有则被insert进来
    如果已经存在了则无动作执行
      

  10.   

    假设表TT,id是主键,值为1,试试下面的代码
    INSERT IGNORE INTO tt(id) VALUES(1);
      

  11.   

    insert ignore into TABLE1(XXXX) select XXXX from TABLE2
      

  12.   

    你测试过没有,如果ID为主键,再插入为1,则不会插入此条记录,只有1条WARING,
    我是测试通过的,一直让你贴建表及插入记录的SQL,及要求结果出来看看你做了吗?其它人怎么知道你的要求?
      

  13.   

    难道插入了主键重复的记录了? 把你的XXXX设置为UNIQUE KEY或PRIMARY KEY
      

  14.   


    不需要建表语句
    如果是主键,插入重复值,如果成功插入了重复值,那也肯定是会报错的现在是
    abcd等几个字段
    其中的x是主键
    插入的时候,x字段是通过程序生成的UUID
    需要进行判断的是
    如果存在a=1,b=2,c=3,b=4的记录则不插入
    否则插入一个a=1,b=2,c=3,b=4
    insert ignore tablename (id,a,b,c,d) values ('UUID保证不会重复',1,2,3,4)
    已经用了ignore并且成功了
    不知道这样写是不是有其他的问题(貌似你不是技术人员吧....)
      

  15.   

    你仔细看过12楼的回答没有?
    INSERT IGNORE要求主键 OR 唯一索引,到此个回答,你才讲,要插入4个字段
    insert tablename (id,a,b,c,d) select distinct 'UUID保证不会重复',1,2,3,4 from tt
    where not exists(select 1 from tt where  a=1 and b=2 and c=3 and b=4)你搜索一下我回答的问题,就知道我是否是技术人员
      

  16.   

    不需要建表语句为了节约大家的时间,不需要再模拟你的环境 如果是主键,插入重复值,如果成功插入了重复值,那也肯定是会报错的
    你测试过INSERT IGNORE没有?如果有重复值,是不会插入的,也不会报错。有
    warning
      

  17.   

    那就创建一个 unique 索引
      

  18.   

    这个事情跟主键一点关系都没有
    主键的生成方式不需要你操心
    真正需要操心的是其他的字段
    例如如果你要在数据库中进行初始化某个表
    那么就很需要这样的不重复插入的句子了字段的内容和数量一点意义都没有,都只是一种形式,
    只是要抽象为某种模式去思考问题
    于是你给出的那个解答
    insert tablename (id,a,b,c,d) select distinct 'UUID保证不会重复',1,2,3,4 from tt
    where not exists(select 1 from tt where  a=1 and b=2 and c=3 and b=4)
    从语法的角度我是理解的
    也懂得的
    但是有个问题就是
    例如初始化某个表的时候
    sqlserver会这么写
    if not exists(select * from TABLE where XX1 = XX1 and XX2 = XX2 ......)
    insert into TABLE(XX1,XX2....)
    values (XX1,XX2.....)
    现在的mysql使用的对应的语句是
    INSERT IGNORE INTO tt(主键,XX1,XX2...) VALUES(主键值,XX1,XX2....); 
    这样的句子不报错
    但是不知道是不是有语法或者语义上的错误
      

  19.   

    自行测试一下不就知道了?
    主键是唯一的,用INSERT IGNORE不会报错,也不会插入记录