选择所有相关记录

时间:2020-09-14 19:11:17

标签: sql sql-server select

我有一个表(在SQL Server中),存储表,如下所示。 Old_Id的目的是用于更改跟踪。

这意味着当我要更新记录时,原始记录必须保持不变,但是必须使用新的Id和更新的值以及{中的修改后的记录的ID {1}}列

Old_Id

我的问题是:

当我搜索id = 1或2或4时,我想选择所有相关记录。

在这种情况下,我想查看记录以下ID:1、2、4

如何在存储过程中编写它?

即使这样做是不好的做法,我也不能更改此逻辑,因为它的遗留数据库而且它是一个很大的数据库。

任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您可以使用递归公用表表达式(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;
相关问题