Используйте функции GREATEST () и LEAST () для определения общих значений в нескольких столбцах.Затем используйте DISTINCT, чтобы распознать дубликаты.
select distinct least(a, b) as a
, greatest(a, b) as b
, c
from t6
Это даст вам точный набор записей, который вы запрашивали.Но все станет сложнее, если вам нужно будет включить другие столбцы из T6.
"Но мне было интересно, будет ли это работать и для полей VARCHAR2?"
Да, но он будет использовать значения ASCII для определения порядка, что не всегда соответствует ожиданиям (или желаниям).
«Кроме того, моя таблица T6 может содержать десятки тысяч записей».
В современных условиях это не так много данных.DISTINCT вызовет сортировку, которая должна умещаться в памяти, если A
и B
не являются действительно длинными столбцами VARCHAR2 - но, вероятно, даже тогда.
Если это запрос, который вы собираетесь выполнитьЕсли вы хотите много работать, то вы можете построить индекс на основе функций, чтобы удовлетворить его:
create index t6_fbi on t6(least(a, b)
, greatest(a, b)
, c )
/
Но я бы действительно беспокоился, только если у вас есть настоящая проблема производительности с запросом.