我试图弄清楚如何在SQL中进行影响两个表的复杂更新。
我的2个表格如下:
t1: key, val_1 (with key as the primary key)
t2: t1_key, user_id, val_2 (with t1_key and user_id as the primary key)
我需要弄清楚如何进行更新,如果给出了user_id“u”和密钥“k”:
if (["u"+"k"] does not exist at all in t2) {
update t1.val = t1.val+1 where key="k";
insert ("u","k",1) into t2;
} else if ( ["u"+"k"] exists in t2 and val_2 < 1 ) {
update t1.val = t1.val+1 where key="k";
update t2.val2 = t2.val2+1 where t1_key="k" AND user_id="u";
}
有什么想法吗?
答案 0 :(得分:0)
好吧,你的伪代码看起来就像一个查询。我在SQL Fiddle上输入了它: http://sqlfiddle.com/#!3/19597d/11
declare @k int = 3
declare @user_id int = 1
if not exists (select * from t2
where user_id = @user_id
and t1_k = @k) begin
update t1 set val = val + 1 where k = @k
insert t2 values (@k, @user_id, 1)
end else if
exists ( select * from t2
where user_id = @user_id
and t1_k = @k
and val < 1) begin
update t1 set val = val + 1 where k = @k
update t2 set val = val + 1
where t1_k = @k
and user_id = @user_id
end
select * from t1;
select * from t2;
但是,当你实现这个时,你会想要交易。 (小提琴似乎不喜欢那样。)
不确定您是否在某些情况下不做任何事情,但您的代码没有最终的else子句。