在表中插入记录之前/之后删除旧记录,记录数> 2
Posted
技术标签:
【中文标题】在表中插入记录之前/之后删除旧记录,记录数> 2【英文标题】:Delete the Old record before/after insert the record in a table, iff the record count is > 2 【发布时间】:2016-11-29 03:05:15 【问题描述】:在将记录插入该表之前/之后删除表中的旧记录,并且仅当记录数大于2时才删除旧记录。
如何实现以下场景:
表名称:示例
Id Name Date Position
1 phani 2013 Trainee
2 phani 2014 Developer
现在我们正在为 phani 再插入一条记录
即 3 phani 2015 sr.Developer
结果:
Id Name Date Position
1 phani 2013 Trainee
2 phani 2014 Developer
3 phani 2015 sr.Developer
现在我们必须创建一个触发器,该触发器必须删除旧记录 (意味着必须删除2013年的记录。)
预期输出:
Id Name Date Position
2 phani 2014 Developer
3 phani 2015 sr.Developer
现在假设在 2016 年,职位再次从 sr.developer 更改为项目经理。
那时 2014 年的记录必须删除并插入新记录,如下所示:
Id Name Date Position
3 phani 2015 sr.Developer
4 phani 2016 Project Manager
【问题讨论】:
您使用的是 SQL Server 还是 Postgres?请适当标记您的问题。 【参考方案1】:听起来您已经知道我们的答案了。创建一个after insert
触发器,用于检查具有给定名称的行数是否大于两个。如果是这样,找到与该名称匹配的最早日期并删除所有具有该日期和名称的行。
【讨论】:
【参考方案2】:假设您使用 SQL Server 作为数据库服务器。以下查询将产生您所寻找的结果。您只需将此逻辑包装到触发器定义中即可。
DELETE T1 FROM
TableName T1
WHERE T1.[Date] = ( SELECT MIN([Date])
FROM TableName T2
WHERE T1.ID = T2.ID
HAVING COUNT(*) > 2 )
【讨论】:
以上是关于在表中插入记录之前/之后删除旧记录,记录数> 2的主要内容,如果未能解决你的问题,请参考以下文章