在MySQL中,假设我有一个包含名字和姓氏的表,
FName - LName
John - Paul
Paul - John
Alice - Peter
Peter - Alice
因此,如果您看到每一行都有重复的条目,但反过来。
我想以这样一种方式选择行:每个唯一条目只选择其中一行(不管哪一行)。
我的结果表应该是:
FName - LName
John - Paul
Peter - Alice
有多个正确的结果,但我希望你明白这一点。
提前致谢!
答案 0 :(得分:1)
SELECT DISTINCT
least(fName, lName) fName,
greatest (FName, lName) lName
FROM table
这样做。您的名字将出现在collatino中相关的姓氏之前。
答案 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顺序(从左到右,从右到左)建立复合排名,使两个重复行的组值相同,此时您可以选择两个中的第一个