使用SQL删除镜像列的行



在MySQL中,假设我有一个名为的表

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

所以,如果你看到每一行都有重复的条目,但相反。

我希望以这样一种方式选择行,即每个唯一条目只选择其中一行(无论是哪一行)。

我得到的表格应该是这样的:

FName - LName
John  - Paul
Peter - Alice

正确的结果不止一个,但我希望你能理解。

提前感谢!

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

这样就可以了。在排序规则中,你的名字将排在相关的姓氏之前。

假设总是有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顺序(从左到右和从右到左)建立一个组合列组,为两个重复行提供相同的组值,此时您可以只选择两个行中的第一个。

相关内容

  • 没有找到相关文章

最新更新