簡體   English   中英

選擇所有相關記錄

[英]Select all related records

我有一個表(在 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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM