有一个包含以下列的表:
ID Parent Child 1 A B 2 B A 3 C D 4 E F 5 D C ...
如何获取列Parent + Child与Child + Parent相同的条目?
E.g。 ID和1的条目在组合它们的列时是相同的。所以结果应该只是一个ID为1或2
的条目所以结果集应如下所示:
ID Parent Child 1 A B 3 C D 4 E F ...
在合并父母与子女或子女与父母时,重复的每个条目都不应成为结果的一部分。
更多信息:列表示表之间的关系。因此,如果父母与孩子之间存在关系,我就不需要另外一个从孩子到父母的关系。
我自己的结论是,这个问题不能用SQL语句来解决,需要一个循环,但我希望有人在那里教我更好。 提前谢谢!
更新: 我的最小例子没有考虑到每列中的值都不像我写的那么容易。它们是通过(替换(newid(),' - ','')生成的,并且是guid的afaik。所以,我不确定它是否可能将它们与通常的运算符(如<,>,=)进行比较,如果最新的newid()确实是>以前的newid()? 有没有其他方法可以解决这个问题? 实际上,表格如下所示:
ID Parent Child 6C57C330EB5A4DF8BC245A245569A97C FF42FB32F3FC463EA3366FAB7425E706 7FEF3100E5F149EFB27967F0BE95FFC8 9AD0035D04FA4695AE7854F4BE29FF60 7FEF3100E5F149EFB27967F0BE95FFC8 FF42FB32F3FC463EA3366FAB7425E706
到目前为止感谢!
答案 0 :(得分:1)
您可以使用以下查询:
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
答案 1 :(得分:1)
您可以轻松实现这一目标:
SELECT * FROM YourTable t
WHERE t.Parent > t.Child
这样做如下:在每一对中(除非它们可以相同,我怀疑)其中一个必须大于另一个,因此 - 这个条件将只返回每对中的一个。
答案 2 :(得分:0)
可以通过设置操作完成,例如:
SELECT parent, child FROM YourTable
INTERSECT
SELECT child, parent FROM YourTable