SQL假如id存在就update ,如果不存在就insert ,这样的语句怎么写啊?if exists(SELECT ) 吗?怎么得到?表jilu设计
id,
sid,
tn,值ding,unti,not
date,格式2009-08-15 DATE
total,同sid,同tn,同date的数目
里面的数据
id,sid,tn,date,total
10,1,ding,2009-08-12,20
20,22,unti,2008-02-10假如在表中存在sid=10 并且date=2009-05-10 并且tn的值等于ding的,那么就将该id的total的值自动加一,如果没有符合这样的条件的,那么就insert新的记录,记录的sid=10,date=今日的值,tn等于ding,total等于1
这样的SQL语句如何写啊?
我这几天都是弄这个jilu表的统计的,希望大家帮我。

解决方案 »

  1.   

    replace into..语句可以实现。
    只是要求你的表里要有主键。
      

  2.   

    能够写详细点吗?
    表jilu中的主键是id
      

  3.   

    你可以参考一下 insert into .... ON DUPLICATE KEY UPDATE ...MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
      

  4.   

    官方手册中的例子INSERT INTO table (a,b,c) VALUES (1,2,3)
      ON DUPLICATE KEY UPDATE c=c+1;设置你的这个表 jilu 中 sid,date 为复合的unique 索引。
    然后
    insert into jilu values (xx,xxx,xxx,xx) on duplicate key update total=total+1
    另外建议不要用 date 这种保留字 做为字段名。
      

  5.   

    楼上的方法不错,没用过,存储过程可以实现。DELIMITER //
    DROP PROCEDURE IF EXISTS sp_insert_update
    //CREATE PROCEDURE sp_insert_update(in vsid int,in vtn varchar(20),in vdate date)
    BEGIN
       DECLARE num int DEFAULT 0;
       DECLARE vid int DEFAULT 0;
       
       SELECT count(*),jl.id INTO num,vid FROM jilu jl WHERE EXISTS (
          SELECT 1 FROM jilu j WHERE j.sid=vsid AND j.tn=vtn AND j.date=vdate)
          GROUP BY jl.id LIMIT 1;
       
       IF num=0 THEN 
          INSERT INTO jilu VALUES (null,vsid,vtn,vdate,1);
       ELSE
          UPDATE jilu SET total=total+1 WHERE id=vid;
       END IF;
    END;
    //
      

  6.   

    两条SQL就行了:
    UPDATE jilu SET total = total + 1
    WHERE sid = 10 AND `date` = '2009-05-10' AND tn = 'ding';INSERT INTO jilu (sid, `date`, tn, total)
    SELECT 10, CURDATE(), 'ding', 1
    FROM jilu
    WHERE ROW_COUNT() = 0;