关于查询3个表的储存过程,要实现“下订单购买满200元返还50元到账户”的功能

coldermice 2007-06-21 01:31:51
有三个表一个会员表custom lijin字段就是会员账户。一个订单表orderlist ordernum字段是订单号,还有一个是记录满200元的订单的表lijin 里面有ordernum字段,userid字段(记录会员号),xrtime字段(记录下单时间)。下单日起15日内订单通过拆分或者换货后,总额还是满200元。会员账户就会增加50元。 下面是我写的一个job。提示错误: 服务器: 消息 208,级别 16,状态 1,行 1 对象名 'a' 无效。


update a set state=1,rhtime=getdate()
UPDATE b SET lijin = lijin+50,dj_lijin=dj_lijin-50
FROM lijin as a left outer join custom as b
on a.userid = b.userid left outer join orderlist as c on a.ordernum=c.ordernum
WHERE c.state=9 and
(select sum(sumprice) from orderlist where userid=c.userid and state=9 and
replace(replace(ordernum,'-C',''),'-H','') = replace(replace(c.ordernum,'-C',''),'-H','')) >= 200
and a.state=0 and a.xrtime<=getdate()-15

麻烦各位帮忙看看是哪里出错。
还有一个就是需要把增加了50元的会员和时间记录到m_record表里,代码如下:
insert into m_record(ordernum,title,rep_money,username,userid) values('"&a.ordernum&"','购物满200赠送50元礼金',50,'"&a.username&"','"&a.userid&"')

不知应该添加到哪里呢?

能帮我解决问题的兄弟,分全部给他。谢谢。。
...全文
234 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
coldermice 2007-06-22
  • 打赏
  • 举报
回复
呵呵,非常感谢一两清风兄的提示。我怎么就没想到可以运行2次代码呢。。老是想一次更新2个表。真是非常感谢您2次帮助我。。。 结贴。分给你。以后有什么问题,再继续请教您!
hellowork 2007-06-21
  • 打赏
  • 举报
回复
楼主的问题不是很难,只是没有把怎样更新阐述得更清楚些.例如:
更新custom表的礼金时的条件是什么:即是否既要判断orderlist表又要判断lijin表,每个表中涉及的列有哪些?比如下订单日期到底在哪个表中?更新custom表的礼金时有没有限制条件以保证不在每次更新时重复递加50?
hellowork 2007-06-21
  • 打赏
  • 举报
回复
----更新custom表的lijin,dj_lijin列
update a set lijin = lijin + 50,dj_lijin=dj_lijin-50
from custom as a INNER JOIN orderlist as b on a.userid = b.userid
where b.state = 9 and
(select sum(sumprice) from orderlist where userid=b.userid and state=9 and
replace(replace(ordernum,'-C',''),'-H','') = replace(replace(c.ordernum,'-C',''),'-H','')) >= 200
and b.订单日期 <= getdate() - 15 /*没有指明用哪个日期来判断下订单天数,只好使用" b.订单日期"来占位.而且这里还应该加更新条件,例如只限定VIP=0的更新,否则lijin列会在每次更新时都增加50,这样的更新明显是错误的.但楼主没有说清更新规则,只好先这样写了*/
hellowork 2007-06-21
  • 打赏
  • 举报
回复
update a set state = 1,rhtime = getdate()
--------------------------------------------------------------------
custom表是否还需要更新state和rhtime?
coldermice 2007-06-21
  • 打赏
  • 举报
回复
state是lijin表的,代表这条记录的状态。0代表还在审核中,1代表已经审核并已将50元加入账户。

custom要更新lijin字段。也就是添加50。 lijin表就是要更换状态state=1
还要写一条信息到m_record.记录下已添加的订单号,会员和时间。

不知道一两清风兄有什么好的办法可以作到吗?
hellowork 2007-06-21
  • 打赏
  • 举报
回复
满200元的订单就会记录订单号,会员号和下单时间到lijin表。
----------------------------------------------------------------------------
被楼主在主题中写的代码搞糊涂了,请楼主再明确一下:
1.and a.state=0 and a.xrtime<=getdate()-15
state应该是custom表中的列,而xrtime应该是orderlist表中的列吧,怎么用了相同的表别名?

2.楼主要更新的表应该有二个,一个是custom表,一个是lijin表.请楼主指明一下要更新custom表的哪些列,要更新lijin表中的哪些列,各自的更新规则是什么?
coldermice 2007-06-21
  • 打赏
  • 举报
回复
因为怕下的订单有一些通过换货之后就不满200元了。所以要用(select sum(sumprice) from orderlist where userid=c.userid and state=9 and
replace(replace(ordernum,'-C',''),'-H','') = replace(replace(c.ordernum,'-C',''),'-H','')) >= 200 这句。 满200元的订单就会记录订单号,会员号和下单时间到lijin表。

lijin和会员的关联就是userid会员号,和订单的管理就是ordernum订单号。 判断15天就用xrtime<=getdate()-15



因为要同时更新的表字段不一样。不知道有什么办法吗?

insert into m_record(ordernum,title,rep_money,username,userid) values('"&a.ordernum&"','购物满200赠送50元礼金',50,'"&a.username&"','"&a.userid&"')

不知应该添加到哪里呢?
CathySun118 2007-06-21
  • 打赏
  • 举报
回复
update 不能同时更新多表
云中客 2007-06-21
  • 打赏
  • 举报
回复
UPDATE b SET lijin = lijin+50,dj_lijin=dj_lijin-50
FROM lijin as a left outer join custom as b
on a.userid = b.userid left outer join orderlist as c on a.ordernum=c.ordernum
WHERE c.state=9 and
(select sum(sumprice) from orderlist where userid=c.userid and state=9 and
replace(replace(ordernum,'-C',''),'-H','') = replace(replace(c.ordernum,'-C',''),'-H','')) >= 200
and a.state=0 and a.xrtime<=getdate()-15
----------------------------------------------------------------------------------
这里的错误在于,请将UPDATE b SET lijin = lijin+50,dj_lijin=dj_lijin-50
更改为UPDATE custom SET lijin = lijin+50,dj_lijin=dj_lijin-50
云中客 2007-06-21
  • 打赏
  • 举报
回复
update语句不能同时更新两个表的不同列
如果你仅是想根据一个表的内容来更新另一个表的相应列,可以这样来写:
Update Table1 Set Col1=B.Col2*10
From Table1 A,Table 2 WHere A.Col=B.Col
hellowork 2007-06-21
  • 打赏
  • 举报
回复
1.update只能更新一个表,象下面这样写不行:
update a set state=1,rhtime=getdate()
UPDATE b SET lijin = lijin+50,dj_lijin=dj_lijin-50
2."还有一个是记录满200元的订单的表lijin ":
lijin表与custom表和orderlist表之间的关系是什么?判断下单天数是否超过15天是依据orderlist表还是lijin表?lijin表的数据是怎么来的,既然lijin表中保存的已经是满200元的订单,为什么还要从orderlist表中进行判断?
hellowork 2007-06-21
  • 打赏
  • 举报
回复
请楼主测试一下(记得先将数据备份):

----更新custom表(注意:要先更新custom表然后才能更新lijin表,因为更新时需要借助lijin表的a.state = 0,否则更新会"伤及无辜")
update b set lijin = lijin + 50,dj_lijin = dj_lijin - 50
from custom as b
INNER JOIN lijin as a on b.userid = a.userid
INNER JOIN orderlist as c on c.ordernum = a.ordernum
where c.state = 9 and
(select sum(sumprice) from orderlist where userid=c.userid and state=9 and
replace(replace(ordernum,'-C',''),'-H','') = replace(replace(c.ordernum,'-C',''),'-H','')) >= 200
and a.state = 0 and a.xrtime<=getdate()-15

----更新lijin表
update a set state = 1 from lijin as a
INNER JOIN orderlist as c on a.ordernum = c.ordernum
where c.state = 9 and
(select sum(sumprice) from orderlist where userid=c.userid and state=9 and
replace(replace(ordernum,'-C',''),'-H','') = replace(replace(c.ordernum,'-C',''),'-H','')) >= 200
and a.state = 0 and a.xrtime<=getdate()-15

coldermice 2007-06-21
  • 打赏
  • 举报
回复
是要判断 orderlist
(select sum(sumprice) from orderlist where userid=c.userid and state=9 and
replace(replace(ordernum,'-C',''),'-H','') = replace(replace(c.ordernum,'-C',''),'-H','')) >= 200
这个代码就是判断orderlist 的汇总金额是不是大于等于200。而订单的时候就是从lijin表去判断。 a.xrtime<=getdate()-15 不过也可以改成用订单表去判断时间 c.datetime<=getdate()-15 .

coldermice 2007-06-21
  • 打赏
  • 举报
回复
有的。lijin表有一个state。只有state=0时才会添加50元。15天的时间也是lijin表的xrtime来判断。 lijin as a custom as b orderlist as c
下面的代码就是用来保证不会重复添加50元:
a.state=0 and a.xrtime<=getdate()-15

现在主要是 update a set state=1 和 update b set lijin=lijin+50,dj_lijin=dj_lijin-50
要能同时更新。也就是会员账户添加50元 同时lijin表的状态变成1。 现在没有想到好的办法能同时update
coldermice 2007-06-21
  • 打赏
  • 举报
回复
主要就是要同时更新2个表和添加一条新数据。不知道要怎么写。。
麻烦各位给个相关的例子语句,

34,591

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧