我有一个表,其中包含具有ID和ORIGID的多个列作为用于链接两个记录的列。
输入新记录时,ID和ORIGID相同。如果记录数据被修改,它将获得新的ID,但ORIGID指向已修改的先前记录ID。
数据看起来像:
ID ORIGID
----------------
1 1
2 1
3 2
4 4
5 3
6 6
7 5
8 8
9 9
10 7
我正在寻找一个有效的查询,当我搜索ID为10的记录(结果应包括10、7、5、3、2、1)时,我应该能够看到所有相关记录。当我用ID 5搜索时,应该返回所有行5,3,2,1
我尝试过的查询是:
WITH
CTE
AS
(
select ID, ORIGID from t
where ID = 10
UNION ALL
select child.ORIGID
, CASE WHEN parent.ID = child.ORIGID THEN child.ID ELSE NULL END AS prev
from
t AS child
inner join CTE AS parent on
(parent.ORIGID = child.ID)
)
SELECT * FROM CTE;
但是它仅返回第一行和最后一行。
尝试一下:
;WITH #results AS
(
SELECT id,
ORIGID
FROM table_name
WHERE id = 10
UNION ALL
SELECT t.id,
t.ORIGID
FROM table_name t
INNER JOIN #results r ON r.ORIGID = t.id AND R.ID <> t.id
)
SELECT id, ORIGID
FROM #results ;
以及用于过去和将来的记录
;WITH #results AS
(
SELECT id, ORIGID FROM table_name WHERE id = 2
UNION ALL
SELECT t.id, t.ORIGID FROM table_name t
INNER JOIN #results r ON r.ORIGID = t.id AND R.ID <> t.id
),#results2 as
(
select ID,ORIGID from table_name where ID = 2
union all
select t.ID,t.ORIGID from table_name t join #results2 r on t.ORIGID=r.id AND R.ID <> t.id
)
SELECT * FROM #results
UNION
SELECT * FROM #results2