Если я правильно понимаю слова: цель состоит в том, чтобы получить уникальность даже для нескольких столбцов , количество столбцов может различаться, таблица может содержать 2, 3 или более столбцов.
В этом если у вас есть несколько вариантов, например, вы можете отменять сводку значений, сортировать, сводить и принимать уникальные значения. Точный код зависит от версии Oracle. Второй вариант - listagg()
, но он имеет ограниченную длину, и вам следует использовать разделители, не появляющиеся в значениях.
Другой вариант - сравнить данные как коллекции. Здесь я использовал dbms_debug_vc2coll
, который представляет собой простую таблицу varchars. Multiset except
выполняет основную работу:
with t as (select rownum rn, col1, col2, col3,
sys.dbms_debug_vc2coll(col1, col2, col3) as coll
from test )
select col1, col2, col3 from t a
where not exists (
select 1 from t b where b.rn < a.rn and a.coll multiset except b.coll is empty )
dbfiddle с таблицей из 3 столбцов, нулями и различными тестами