SQL - (Update,From)语句在同一个表上使用内部联接

时间:2017-08-01 06:54:19

标签: sql-server sql-update inner-join

我有以下SQL查询,这个查询的目的是检测丢失的序列:例如,如果我有seq 1,2,3,5 ...它应该用消息"更新记录5。缺少先前的序列"。

尝试使用inner join语句中的更新来执行此逻辑,如下所示,尽管它在第1行给出的错误TblA不明确:

update      dbo.TblA 
set         Msg = 'Previous sequence is missing'
from        dbo.TblA R1
left join   dbo.TblA R2 
on          (R2.Sequence = R1.Sequence -1) 
and         (R2.StatementNumber = R1.StatementNumber)
where       R2.TransID is  null and R1.Sequence <> 1

我知道这可以通过嵌套查询轻松修复,但我想的是更有条理和更整洁的东西:)

1 个答案:

答案 0 :(得分:1)

使用此查询。它没有在表上设置要更新的别名,只是在左连接上。

update      dbo.TblA 
set         Msg = 'Previous sequence is missing'
from        dbo.TblA 
left join   dbo.TblA R
on          (R.Sequence = TblA.Sequence -1) 
and         (R.StatementNumber = TlbA.StatementNumber)
where       R.TransID is  null and Tbla.Sequence <> 1