如何过滤相反的重复项

How to filter opposite duplicates

有一个 table 包含以下列:

ID Parent Child
1  A      B
2  B      A
3  C      D
4  E      F
5  D      C
...

如何在列 Parent+Child 与 Child+Parent 相同时获取条目?

例如如前所述,在组合列时,ID 为 1 和 2 的条目相同。所以结果应该只是一个条目,要么是 ID 为 1 要么是 2

所以结果集应该是这样的:

ID Parent Child
1  A      B
3  C      D
4  E      F
...

在组合 parent 和 child 或 child 和 parent 时将重复的每个条目不应成为结果的一部分。

更多信息:列表示 table 之间的关系。因此,如果存在从 parent 到 child 的关系,我不需要具有从 child 到 parent.

的关系的另一个条目

我自己的结论是这个问题不能只用 SQL-Statement 解决,需要一个循环,但我希望有人能更好地教我。 提前致谢!

更新: 我的最小示例没有考虑到每列中的值并不像我写的那么简单。它们是通过 (replace(newid(),'-','') 生成的,并且是 guid 的 afaik。所以,我不确定是否可以将它们与 <,>,= 等常用运算符进行比较,如果是最新的newid() 真的 > 以前的 newid()? 还有另一种方法可以解决这个问题吗? 实际上 table 看起来像这样:

ID                                 Parent                             Child
6C57C330EB5A4DF8BC245A245569A97C   FF42FB32F3FC463EA3366FAB7425E706   7FEF3100E5F149EFB27967F0BE95FFC8
9AD0035D04FA4695AE7854F4BE29FF60   7FEF3100E5F149EFB27967F0BE95FFC8   FF42FB32F3FC463EA3366FAB7425E706

到目前为止谢谢!

您可以使用这样的查询:

SELECT MIN(ID),
       CASE WHEN Parent < Child THEN Parent ELSE Child END,
       CASE WHEN Parent >= Child THEN Parent ELSE Child END
FROM mytable
GROUP BY CASE WHEN Parent < Child THEN Parent ELSE Child END,
         CASE WHEN Parent >= Child THEN Parent ELSE Child END

你可以很容易地做到这一点:

SELECT * FROM YourTable t
WHERE t.Parent > t.Child

其工作原理如下:在每对中(除非它们可以完全相同,我对此表示怀疑)其中一个必须比另一个大,因此 - 这种情况将 return 每对中只有一个。

可以通过集合运算来完成,例如:

 SELECT parent, child FROM YourTable 
 INTERSECT
 SELECT child, parent FROM YourTable