n未来。@daZza不需要镜像数据。@Zohar拒绝,但如果有解决方案出现,我愿意将数据移植到其中任何一个。我主要使用您实际使用的SQLServer2008R2和2014tag one dbms。显然,您不需要MySql、SqlServer和Sqlite的

n未来。@daZza不需要镜像数据。@Zohar拒绝,但如果有解决方案出现,我愿意将数据移植到其中任何一个。我主要使用您实际使用的SQLServer2008R2和2014tag one dbms。显然,您不需要MySql、SqlServer和Sqlite的,sql,sql-server,Sql,Sql Server,n未来。@daZza不需要镜像数据。@Zohar拒绝,但如果有解决方案出现,我愿意将数据移植到其中任何一个。我主要使用您实际使用的SQLServer2008R2和2014tag one dbms。显然,您不需要MySql、SqlServer和Sqlite的解决方案。。。请仅标记相关的rdbms,并添加特定的版本标记。表中是否需要镜像数据?我会删除其中一个,然后在用户ID上放置一个主键。这样以后就可以避免类似的情况了。@daZza不需要镜像数据。@Zohar拒绝了,但如果有解决方案,我愿意将数据移


n未来。@daZza不需要镜像数据。@Zohar拒绝,但如果有解决方案出现,我愿意将数据移植到其中任何一个。我主要使用您实际使用的SQLServer2008R2和2014tag one dbms。显然,您不需要MySql、SqlServer和Sqlite的解决方案。。。请仅标记相关的rdbms,并添加特定的版本标记。表中是否需要镜像数据?我会删除其中一个,然后在用户ID上放置一个主键。这样以后就可以避免类似的情况了。@daZza不需要镜像数据。@Zohar拒绝了,但如果有解决方案,我愿意将数据移植到任何一个镜像数据。我主要使用SQLServer2008R2和2014这是一个很好的答案,但删除是不够的。必须添加一个检查约束,以防止将来重复。这是一个很好的答案,但删除是不够的。必须添加检查约束,以防止将来重复。
select userid,function1,function2 from (
select userid,function1,function2
,row_number() over(partition by userid
                   order by 
                   case when function1<function2 then function1 else function2 end,
                   case when function1>function2 then function1 else function2 end,
                   function1
                  ) as rnum
from tablename
) t
where rnum=1
with cte as (select userid,function1,function2
             ,row_number() over(partition by userid
                   order by 
                   case when function1<function2 then function1 else function2 end,
                   case when function1>function2 then function1 else function2 end,
                   function1
                  ) as rnum
            from tablename)
delete from cte where rnum > 1
DELETE FROM table
WHERE temp_pk IN
(
    SELECT Max(temp_pk) AS pkToDelete
    FROM
        (
            SELECT temp_pk, A, B
            FROM table
            WHERE A<=B
        UNION ALL
            SELECT temp_pk, B, A
            FROM table
            WHERE A>B
        ) AS u
    GROUP BY A, B
    HAVING COUNT(*) > 1
)
delete from t
    where function1 > function2;
select *
into temp_t
from t
where function1 < function2;

truncate table t;

insert into t
    select *
    from temp_t;
select *
into temp_t
from t
where function1 < function2
union all
select *
from t t
where function1 > function2 and
      not exists (select 1 from t t2 where t2.function1 = t.function2 and t2.function2 = t.function1);