使用SQL重写镜像列的行

时间:2015-02-06 23:45:23

标签: mysql sql

在MySQL中,假设我有一个包含名字和姓氏的表,

FName - LName
John  - Paul 
Paul  - John 
Alice - Peter 
Peter - Alice

因此,如果您看到每一行都有重复的条目,但反过来。

我想以这样一种方式选择行:每个唯一条目只选择其中一行(不管哪一行)。

我的结果表应该是:

FName - LName
John  - Paul
Peter - Alice

有多个正确的结果,但我希望你明白这一点。

提前致谢!

2 个答案:

答案 0 :(得分:1)

SELECT DISTINCT
       least(fName, lName) fName,
       greatest (FName, lName) lName
  FROM table

这样做。您的名字将出现在collat​​ino中相关的姓氏之前。

答案 1 :(得分:0)

尝试以下方法,假设总有2个重复,不多,不少:

这假设您的表有一列,其中2个值用连字符分隔。

小提琴: http://sqlfiddle.com/#!2/c04fae/2/0

select
   min(col_lr) as de_duplicated
from
   (
      select
         x.col as col_lr,
         count(y.col) + count(z.col) as grp
      from
         tbl x
      left join tbl y on x.col < y.col
      left join tbl z on concat(right(x.col, length(x.col) - locate(' - ', x.col) - 2), ' - ', substr(x.col, 1, locate(' - ', x.col) - 1)) < z.col
      group by
         x.col
   ) x
group by
   grp

它在表格中以ABC顺序(从左到右,从右到左)建立复合排名,使两个重复行的组值相同,此时您可以选择两个中的第一个