Я собираюсь применить уникальное ограничение 3-столбца (B_ACCT_UID, B_EXT_ID, B_CAMPAIGN_GUID) для моего db. Значения «none» для B_EXT_ID не влияют. Прежде чем это сделать, мне нужно обновить строки B_EXT_ID, чтобы удалить нарушителей (добавьте row_id или что-то в этом роде).Запрос на обновление дубликатов нескольких столбцов
Я знаю, как их найти:
SELECT B_ACCT_UID, B_EXT_ID, B_CAMPAIGN_GUID, COUNT(*)
FROM SB_BATCH
WHERE B_EXT_ID != 'none'
GROUP BY B_ACCT_UID, B_EXT_ID, B_CAMPAIGN_GUID
HAVING COUNT(B_EXT_ID) > 1;
который печатает:
B_ACCT_UID B_EXT_ID B_CAMPAIGN_GUID COUNT(*)
---------- -------------------------------------------------------------------------------------------------------------------------------- ------------------------------------ ----------
3000000010 sto setna 2
3000000010 jeden pierwsza 2
3000000010 dziewiec 14F8CDEDACE0005C98727464800000000000 3
Перед попыткой обновления я выполнивший выберите запрос, который получил бы заменить обновлением.
SELECT B_ACCT_UID, B_EXT_ID, B_CAMPAIGN_GUID
FROM SB_BATCH
WHERE B_EXT_ID IN (SELECT B_EXT_ID FROM SB_BATCH WHERE B_EXT_ID != 'none'
GROUP BY B_ACCT_UID, B_EXT_ID, B_CAMPAIGN_GUID
HAVING COUNT(B_EXT_ID) > 1);
И получил:
B_ACCT_UID B_EXT_ID B_CAMPAIGN_GUID
---------- -------------------------------------------------------------------------------------------------------------------------------- ------------------------------------
3000000010 sto 14F8CDEDACE0005C98727464800000000000
3000000010 sto setna
3000000010 sto setna
3000000010 jeden pierwsza
3000000010 jeden pierwsza
3000000010 jeden 14F8CDEDACE0005C98727464800000000000
3000000010 dziewiec 14F8CDEDACE0005C98727464800000000000
3000000010 dziewiec 14F8CDEDACE0005C98727464800000000000
3000000010 dziewiec 14F8CDEDACE0005C98727464800000000000
Это половина работает пример, потому что он также будет обновлять не-преступников, как
B_ACCT_UID B_EXT_ID B_CAMPAIGN_GUID
---------- -------------------------------------------------------------------------------------------------------------------------------- ------------------------------------
3000000010 sto 14F8CDEDACE0005C98727464800000000000
Можете ли вы помочь мне изменить запрос?
Какая СУБД вы используете? Oracle, Mysql? – Crazy2crack
Это Oracle, версия 11. –
Теперь, что вы хотите сделать? Вы хотите удалить дубликаты? или Обновить одну из повторяющихся строк? Если да, то какой колонке u хотите обновить? – Crazy2crack