日期:2014-05-19  浏览次数:20388 次

|M| 求两表根据时间更新数据 SQL语句 谢谢
票表
ID   有效时间     票座位       状态
1                     1   1排2号             0
2                     3   3排1号             0
3                     4   5排4号             0

订单表
订单号   票座位ID   下订时间                             是否付款       是否有效
1                           1   2007-07-09   23:11:00                   0                     1
2                           2   2007-07-09   08:12:00                   1                     1
3                           3   2007-07-10   09:17:00                   0                     1
----------------------------------------------
要求是:
判断订单表中未付款的下订时间+上票表的有效时间   <   当前时间的时候
将这条订单是否有效改为0   也就是无效   再将票表中的状态改为1也就是可用

谢谢要怎么来写最好


------解决方案--------------------
----创建测试数据
declare @ticket table(ID int,有效时间 int,票座位 varchar(10),状态 bit)
insert @ticket
select 1, 1, '1排2号 ', 0 union all
select 2, 3, '3排1号 ', 0 union all
select 3, 4, '5排4号 ', 0
declare @booking table(订单号 int,票座位ID int,下订时间 datetime,是否付款 bit,是否有效 bit)
insert @booking
select 1,1, '2007-07-09 23:11:00 ', 0, 1 union all
select 2,2, '2007-07-09 08:12:00 ', 1, 1 union all
select 3,3, '2007-07-10 09:17:00 ', 0, 1

----先更新票位表
update a set 状态 = 1
from @ticket as a
inner join @booking as b on a.ID = b.票座位ID
where b.是否付款 = 0 and dateadd(day,a.有效时间,b.下订时间) < getdate()

----再更新订票表
update b set 是否有效 = 0
from @booking as b
inner join @ticket as a on b.票座位ID = a.ID
where b.是否付款 = 0 and dateadd(day,a.有效时间,b.下订时间) < getdate()

----查看
select * from @ticket
select * from @booking


/*结果

--票位表结果
ID 有效时间 票座位 状态
----------- ----------- ---------- ----
1 1 1排2号 1
2 3 3排1号 0
3 4 5排4号 0


--订票表结果

订单号 票座位ID 下订时间 是否付款 是否有效
----------- ----------- ---------------------------------------------
1 1 2007-07-09 23:11:00.000 0 0
2 2 2007-07-09 08:12:00.000 1 1
3 3 2007-07-10 09:17:00.000 0 1
*/

------解决方案--------------------
:)

hellowork(一两清风) 來的真早,沒得答了。
------解决方案--------------------
笔记本无线上网?
------解决方案--------------------