我有一个包含重复反转对的数据列表,我需要删除它们。打电话给他们,name1和name2。在我有汤姆和迈克,迈克和汤姆的地方,这对单打被计算了两次。
name1 | name2
-------|-------
Tom | Mike
Pete | Jenny
Bill | Jenny
Joe | Mary
Mike | Tom
Jenny | Pete
Jenny | Bill
Mary | Joe
Linda | Jenny该列表是学生与辅导员初次匹配的结果,然后是学生/辅导员和辅导员表的产物,这导致了一个更长的列表,并且能够减少到上面的两对。但是,现在无法摆脱这些复制品了。
虽然我在梳理成对的桌子时可能犯了个错误,但我暂时还是被那张桌子困住了。这是一份学生与辅导员配对的名单。
有没有办法解除名单,还是我需要重新开始?
发布于 2015-10-26 07:32:11
你需要返回一个现有的组合吗,例如,如果只有Tom,Mike,您需要准确地返回这个,还是Mike,Tom也可以吗?
-- order of columns doesn't matter
SELECT DISTINCT
CASE WHEN name1 > name2 THEN name2 ELSE name1 END as name1,
CASE WHEN name1 < name2 THEN name2 ELSE name1 END as name2
FROM tab;
-- order of columns is maintained
SELECT DISTINCT name1,name2 -- DISTINCT might not be needed
FROM tab AS t1
WHERE NOT EXISTS(
SELECT * FROM tab AS t2
WHERE t1.name1 = t2.name2
AND t1.name2 = t2.name1
AND t1.name1 > t2.name1)
;请参阅小提琴
如果您想要删除这些行,您可以使用第二个逻辑,实际的语法取决于您的DBMS:
DELETE --change to SELECT * to see which rows will be deleted
FROM tab AS t1
WHERE EXISTS(
SELECT * FROM tab AS t2
WHERE t1.name1 = t2.name2
AND t1.name2 = t2.name1
AND t1.name1 > t2.name1)
;https://dba.stackexchange.com/questions/119139
复制相似问题