使用 SQL 将后续行中的反向对组合在一起

Group reversed pair in subsequent rows together using SQL

我正在处理超过 500,000 行的数据集,ID 为 Parent 和 Child(同一个系列)。

但是,数据集中存在一些 ID 颠倒(从而导致循环)的问题。

我能够提取有问题的记录(大约 2000 行),但我无法将反向 ID 对分组到 后续行 中,以便稍后识别对以进行更正.

Table 1:样本问题数据

YearMonth ParentID ChildID
202101 1234 5678
202101 9012 3456
202102 5678 1234
202102 3456 9012


Table 2:预期输出

YearMonth ParentID ChildID
202101 1234 5678
202102 5678 1234
202101 9012 3456
202102 3456 9012

您可以使用 exists:

select t.*
from t
where exists (select 1
              from t t2
              where t2.parentid = t.childid and
                    t2.childid = t.parentid
             );

要将反向 ID 配对在一起,您可以按 ID 列的最小值(或最大值)排序

select *
from t
where exists (
    select * 
    from t t2 where t2.parentid = t.childid and t2.childid = t.parentid
)
order by case when parentId < childId then parentId else ChildId end