我想从我的数据库中删除行,如果它们之间的唯一区别是Sortname和Spouse_Sortname是交换的。我想要这样做的方法是,通过在列keep中插入一个值1来标记要删除的那些,否则在列keep中插入一个0
recordID Sortname Spouse_Sortname Keep
3 SMITH Anne-Marie ACTONTON John Michael 0
683 BARON Peter Jack BARON Jan Shirlely 0
22 BARON Jan Shirlely BARON Peter Jack 1
28 QUINN Robert QUINN Margaret Joy 0
29 QUINN Margaret Joy QUINN Robert 1
552 JOHNSTONE Brendan James BROWN Julie 0例如-请参阅记录ID 683和22
记录ID 683中的Sortname与记录ID 22中的Spouse_Sortname相同,反之亦然,因此我只想保留其中一条记录。记录ID 28和29也是如此。
我希望找到除了交换了Sortname和Spouse_Sortname之外相同的记录,并将Keep列标记为与我的示例类似。
只要只剩下一条记录,它保留哪一条记录都无关紧要。
发布于 2015-05-01 23:58:14
这些是复制品
select t2.*
from table t1
join table t2
on t1.name = t2.spouseName
and t1.spouseName = t2.name
and t2.recordID > t1.recordID -- this is how you keep one发布于 2015-05-02 01:33:10
这将标记具有较高recordID的行:
SELECT t1.*,
CASE WHEN EXISTS(SELECT * FROM tab AS t2
WHERE t1.Spouse_Sortname = t2.Sortname
AND t1.recordID > t2.recordID)
THEN 1
ELSE 0
END
FROM tab AS t1;https://stackoverflow.com/questions/29986938
复制相似问题