Ова страница је машински преведена. Прочитајте енглески оригинал. English

IBSurgeon библиотека

Како пронаћи и обрисати дупликате записа у Firebird бази података

DELETE команда (како што је дефинисана у SQL стандарду) увек брише све записе који задовољавају услов. Обично желимо да задржимо један од дупликата и обришемо остале. Да бисмо то урадили, морамо користити RDB$DB_KEY - имплицитни физички број записа у Firebird бази података, који се може користити за стварање вештачке разлике између идентичних записа.

DELETE FROM XXX T1 WHERE EXISTS (SELECT * FROM XXX T2 WHERE (T2.column1 = T1.column1 or (T2.column1 is null and T2.column1 is null)) AND (T2.column2 = T1.column2 or (T2.column2 is null and T2.column2 is null)) AND (.......) AND (T2.RDB$DB_KEY > T1.RDB$DB_KEY))

У овом случају, користимо физички RDB$DB_KEY да разликујемо 2 записа са идентичним садржајем у наведеним пољима (column1, column1, итд.), и запис са већим RDB$DB_KEY.

Да бисте пронашли дупликате, можете користити следећи упит са RDB$DB_KEY условом:

SELECT * FROM TABLE T1 WHERE EXISTS (SELECT FIELD FROM TABLE T2 WHERE T1.FIELD = T2.FIELD AND T1.RDB$DB_KEY != T2.RDB$DB_KEY)