Немного предыстории: у меня есть промежуточная таблица без ограничений, которая получает данные за определенный день, затем некоторый последующий код, который объединяет эти данные в таблицу с ключом на ней. Я могу легко избавиться от идеальных дубликатов, используя этот удобный код:
delete from tbstage where rowid in (
select rowid from tbstage
minus
select min(rowid) from tbstage group by pkeyCol1, pkeyCol2, otherCols
);
Это отлично подходит для избавления от идеальных дубликатов, которые появляются в один и тот же день, и в противном случае слияние может испортиться из-за попытки вставить нестабильный набор строк. Тем не менее, есть еще один случай, который я вижу все чаще и не могу понять, как справиться. Иногда будет 2 одинаковых строки, за исключением того, что некоторые другие Cols будут нулевыми. Я не знаю, как систематически избавиться от этих строк без случайного удаления других важных данных. Вот как выглядят данные проблемы:
pkeyCol1, pkeyCol2, otherCol1, otherCol2
row1: 123, ABC, (null), hello
row2: 123, ABC, important, hello
В этом случае я бы хотел избавиться от row1 и сохранить row2. Что делает это немного хитрым, так это то, что otherCol1 может на законных основаниях быть нулевым, как и другие Col2. Если в row1 просто есть нули, а в row2 есть значения для тех же полей, то я хочу избавиться от row1.
Большое спасибо заранее - это приводит меня в бешенство уже несколько дней!