我正在尝试编写一个更新两个表的过程,但我对语法有些不了解。
这些表名为SupportTicketsTbl
和tblSupportEvent
,这些表之间的链接是名为tblTicketsInEvents
的第三个表。
tblSupportEvent
列出了人员计划中的所有事件,每个事件都有一个开始和结束时间,此过程作为sql作业运行并检查当前时间是否大于事件结束时间,如果是这样,它会更新其状态。
现在这个的语法很简单:
UPDATE
tblSupportEvent
SET
[status] = 3
WHERE
eventend < CURRENT_TIMESTAMP
AND
[status] = 1
现在这是我的问题,一个事件链接到故障单,所以当链接到故障单的事件过期时,我想将分配给值的故障单设置回0。
此SELECT
查询显示表之间的关系:
SELECT
*
FROM
tblSupportEvent e
JOIN
tblTicketsInEvents tie
ON
e.id = tie.eventID
JOIN
SupportTicketsTbl t
ON
t.TicketID = tie.ticketID
我能想到解决这个问题的方法是将所有过期的票证ID选入表格然后在SupportTicketsTbl
上进行更新,其中票证ID在我的表变量中,尽管这看起来有点乱。使用更新语句/连接等有更好的方法吗?
我问,因为虽然我可以自己解决问题,但它可能会执行得足够快,就像知道这样做的正确方法。
谢谢
答案 0 :(得分:3)
我相信这样做会比创建临时表更好。
UPDATE SupportTicketsTbl
SET toUpdate = newVal
WHERE
ticketID IN (
SELECT id
FROM tblSupportEvent
WHERE expiredCondition
)