简体   繁体   中英

Select distinct records in mysql

My table

ANONYMOUS
ONE   TWO
1      2
2      1
1      2
3      1

Now i want to select distinct set of one and two. My selected list should be

ANONYMOUS
    ONE   TWO
    1      2
    3      1

Your question isn't very clear, but I guess you mean this:

SELECT DISTINCT one, two
FROM yourtable AS T1
WHERE one <= two
OR NOT EXISTS
(
     SELECT *
     FROM yourtable AS T2
     WHERE T1.one = T2.two
     AND T1.two = T2.one
)

It finds rows with (one, two) where the reversed pair (two, one) does not exist. If both exist, it chooses the pair such that one < two . It also selects rows where the values are equal.

See it working online: sqlfiddle

If you would prefer to use a JOIN instead of NOT EXISTS you can do that:

SELECT DISTINCT T1.one, T1.two
FROM yourtable AS T1
LEFT JOIN yourtable AS T2
ON T1.one = T2.two
AND T1.two = T2.one
WHERE T1.one <= T1.two
OR T2.one IS NULL

See it working online: sqlfiddle

SELECT DISTINCT a.*
FROM        `ANONYMOUS` a
LEFT JOIN   `ANONYMOUS` b ON (a.one=b.two and a.two=b.one)
WHERE       b.one is null or a.one<b.one
ORDER BY    1,2

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM