Кажется, вам нужны строки, в которых значение (cmp1, cmp2, cmp3, fk1) является уникальным.Вы можете использовать оконные функции:
select t.*
from (select t.*,
count(*) over (partition by cmp1, cmp2, cmp3, fk1) as cnt
from t
) t
where cnt = 1;
Альтернативный метод использует not exists
:
select t.*
from t
where not exists (select 1
from t t2
where t2.fk1 = t.fk1 and
t2.cmp1 = t.cmp1 and
t2.cmp2 = t.cmp2 and
t2.cmp3 = t.cmp3 and
t2.id <> t.id
);
То есть не существует другой строки с такой же комбинацией (fk1, cmp1, cmp2, cmp3)
- иразные id
.