Как выделить два столбца вместе отчетливо в произвольном порядке? - PullRequest
0 голосов
/ 09 февраля 2020

Я хочу выделить два столбца вместе по отдельности в произвольном порядке в MySQL.

Например, приведенная ниже таблица -

col1 col2 col3
--------------
a    b    val1
a    c    val2
b    a    val1
b    c    val3
c    a    val2
c    b    val3

Мне нужно отчетливо выбрать col1 и col2 без определенного порядка.

col1 = a AND col2 = b

эквивалентно

col1 = b AND col2 = a

в моем случае, так как значение col3 будет одинаковым для обеих комбинаций col1 и col2.

Ожидаемый результат ниже -

col1 col2 col3
--------------
a    b    val1
a    c    val2
b    c    val3

Я действительно хочу устранить дубликаты.

Любая помощь, которую вы можете оказать, будет принята с благодарностью.

Спасибо Вы заранее.

Ответы [ 2 ]

2 голосов
/ 09 февраля 2020

Используйте функции greatest и least для создания групп:

SELECT col1, col2, col3
FROM (
      SELECT *,
             ROW_NUMBER() OVER(PARTITION BY least(col1, col2), greatest(col1, col2) ORDER BY least(col1, col2), greatest(col1, col2)) AS rn
      FROM mytable
) t
WHERE rn = 1

См. Демо .

1 голос
/ 11 февраля 2020

Просто чтобы дать вам альтернативное и, возможно, лучшее решение с точки зрения настройки производительности, вы можете попробовать запрос ниже, не используя оконные функции -

SELECT * FROM mytable M1
WHERE NOT EXISTS (SELECT 1 FROM mytable M2
                  WHERE M1.col1 = M2.col2
                  AND M1.col2 = M2.col1
                  AND M2.col1 < M2.col2)

Так как он использует предложение Существует, он будет работать быстрее, чем выше запрос. Здесь - демонстрационная версия для обоих запросов.

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