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