【问题标题】:Trigger for update comparing the same row触发更新比较同一行
【发布时间】:2015-06-12 14:25:06
【问题描述】:

问题是当 2 行或更多行具有相同数据时,我需要更新一行,所以我需要比较同一列进行更新。这将更好地解释我:

我有这个触发器(但我不想删除任何东西)

DELETE n1
FROM Codes_Cost n1, Codes_Cost n2
WHERE n1.Code = n2.Code and n1.PeriodID = n2.PeriodID
AND n1.ID < n2.ID;

我需要做类似的事情,但更新另一行。像这样的

UPDATE Codes_Cost n2
SET n2.Status = 'Old'
WHERE n1.Code = n2.Code and n1.ID < n2.ID

但显然它不起作用。 我能做些什么?什么样的查询可以提供帮助?

【问题讨论】:

  • 你用的是什么关系型数据库?
  • @Mureinik SQL Server

标签: sql sql-server database triggers sql-update


【解决方案1】:

如果我理解正确,这应该可行。

UPDATE Codes_Cost 
SET Status = 'Old'
FROM Codes_Cost 
INNER JOIN Codes_Cost n2 ON Codes_Cost.Code = n2.Code 
WHERE
Codes_Cost.ID < n2.ID

针对不明确的表名进行了编辑。

【讨论】:

  • 当使用自联接进行更新时,您应该为两个表设置别名并更新别名。它使代码非常清晰。
  • @SeanLange,是的,问题是同一个表中有 2 行,而不是 2 个表
  • 我明白了。看看这里的代码。 Codes_Cost 具有自联接。我认为你没有理解我的评论。
  • 好的,我明白了!这有效:) UPDATE c2 SET c2.Status = 'Old' FROM Codes_Cost c1, Codes_Cost c2 WHERE c1.Code = c2.Code and c1.PeriodID = c2.PeriodID AND c1.ID
  • @EyMarie 是的,这就是我的意思。我会做一个正确的连接而不是旧样式,但结果是一样的。 :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-25
  • 1970-01-01
  • 2017-06-20
  • 2017-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多