Удаление дубликатов в SQL, используя наименьшее число - PullRequest
0 голосов
/ 16 марта 2019

У меня есть вопрос относительно SQL.

Допустим, у меня есть таблица, в которой есть только 2 столбца, и она выглядит так:

col1    col2
--------------
12345   200000
12345   435000
200000  12345
200000  435000
435000  12345
435000  200000
600     1200
600     900
900     600
900     1200
1200    600
1200    900

Как мне сделать так, чтобырезультат выглядит следующим образом?

col1    col2
---------------
12345   200000
12345   435000
600     900
600     1200

Логика заключается в том, что я хочу получить наименьшее число в качестве основного "ключа".Поскольку 12345 соответствует 200000 и 435000, и поскольку 12345 является самым низким, он становится основным ключом для сопоставления с другими 2 числами.

Вы можете думать об этом как о идентификационных номерах.(12345 = 200000 = 435000) & (600 = 900 = 1200).Поскольку 12345 является самым низким из первой группы, а 600 - самым низким из второй группы, я бы хотел отобразить только 12345 и 600.

Я пробовал:

select col1, col2
from table_name
where col1<col2

но у меня были лишние строки:

Extra row 1: 200000,435000. 
Extra row 2: 900, 1200.

1 Ответ

1 голос
/ 16 марта 2019

Вы можете использовать следующий запрос

SELECT IF(col1 < col2, col1, col2) col1,
       IF(col1 >= col2, col1, col2) col2
FROM mytable
GROUP BY IF(col1 < col2, col1, col2),
         IF(col1 >= col2, col1, col2)

чтобы получить:

col1    col2
---------------
600     900
600     1200
900     1200
12345   200000
12345   435000
200000  435000

Итак, используя приведенное выше в качестве производной таблицы:

SELECT MIN(col1) col1,
       col2
FROM (       
   SELECT IF(col1 < col2, col1, col2) col1,
           IF(col1 >= col2, col1, col2) col2
   FROM mytable
   GROUP BY IF(col1 < col2, col1, col2),
            IF(col1 >= col2, col1, col2)
) AS t
GROUP BY col2

дает ожидаемый результат:

col1    col2
---------------
600     900
600     1200
12345   200000
12345   435000

Демо здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...