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表的统计的,希望大家帮我。
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表的统计的,希望大家帮我。
只是要求你的表里要有主键。
表jilu中的主键是id
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 这种保留字 做为字段名。
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;
//
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;