sql - 选择所有相关记录
问题描述
我有一个存储记录的表(在 SQL Server 中),如下所示。的目的Old_Id
是用于更改跟踪。
这意味着当我想更新一条记录时,原始记录必须保持不变,但必须插入一条新记录,其中包含一个新的Id
和更新的值,并且在Old_Id
列中包含修改后记录的 ID
Id Name Old_Id
---------------------
1 Paul null
2 Paul 1
3 Jim null
4 Paul 2
5 Tim null
我的问题是:
当我搜索 id = 1 或 2 或 4 时,我想选择所有相关记录。
在这种情况下,我想查看以下 id 的记录:1、2、4
怎么写成存储过程?
即使这样做是不好的做法,我也无法更改此逻辑,因为它是遗留数据库并且它是一个相当大的数据库。
有人能帮忙吗?
解决方案
您可以使用递归公用表表达式 (CTE)
WITH cte_history AS (
SELECT
h.id,
h.name,
h.old_id
FROM
history h
WHERE old_id IS NULL
and id in (1,2,4)
UNION ALL
SELECT
e.id,
e.name,
e.old_id
FROM
history e
INNER JOIN cte_history o
ON o.id = e.old_id
)
SELECT * FROM cte_history;
推荐阅读
- ruby-on-rails - 使用 ActiveRecord 禁用数据迁移中的回调 - Ruby/Rails 5
- image - 如何解决 nuxt 静态图片缓存问题?
- mule - 减少 Netsuite 响应时间
- django - 面临 406 错误不可接受:/PV-Reimagine-Bulk-Uploadget/vc/start_date="2021-01-01"/end_date="2021-01-30"/days=7
- database - 数据库设计避免冗余
- vba - 如何从 Form2 设置 Form1.ControlBox=TRUE
- apn - APN 以及它们如何影响调制解调器的网络连接状态
- c# - 无论我尝试什么,CreatedAtAction 都会抛出 InvalidOperationExceptions
- python - Python Teradata 快速加载失败
- php - Codeigniter 限制和偏移分页不按降序工作