我有两张桌子:a)BookFine和b)IssuedBook。
在BookFine中,我有列RegNo和LateFee,我只存储延迟的延迟费用 针对学生注册号的书籍。
在IssuedBook中我有列RegNo, BookTitle,IssueDate和ReturnDate。
我想实现涉及两个表的这个事情:
每当学生在ReturnDate之后推迟一本书时(如果 ReturnDate<当前日期)然后是BookFine表中的LateFee列 如果BookFine.RegNo = IssuedBook.RegNo。
,则应增加1
我已经通过SQL Job Schedules成功完成了这项工作,但我想知道这是不是应该这样做,还是有其他好办法。请注意,我使用的是SQL Server 2008 r2。
感谢。
答案 0 :(得分:0)
您正在寻找的语法是:
UPDATE BookFine
SET LateFee = LateFee +1
WHERE RegNo IN (SELECT RegNo FROM IssuedBook WHERE ReturnDate < CurrentDate)
但是您需要处理案例,例如在BookFine中没有此学生的记录,这可以通过首先运行prep语句来初始化零记录来完成。 (将这两者放在一个交易中就可以防止误报0记录)
INSERT INTO BookFine (RegNo, LateFee)
SELECT RegNo, 0
FROM IssuedBook
WHERE ReturnDate < CurrentDate
AND RegNo NOT IN (SELECT RegNo FROM BookFine)