При выполнении задачи – с мигрировать данные по адресам для контрактов, необходимо произвести проверку на наличие дублированных записей. Известно, что у одного контракта может быть только один адрес.
В миграционную таблицу MIGR_ADDRESS выгружены данные
CREATE TABLE MIGR_ADDRESS (ID_CONTRACT NUMBER(10), V_ADDRESS VARCHAR2(256) ) TABLESPACE MIRAVILD_DATA; COMMENT ON TABLE MIGR_ADDRESS IS 'Миграция'; COMMENT ON COLUMN MIGR_ADDRESS.ID_CONTRACT IS 'Код контракта'; COMMENT ON COLUMN MIGR_ADDRESS.V_ADDRESS IS 'Адрес'; /
Как проверить, есть ли в таблице задублированные строки (к одному контракту привязано несколько адресов) и вывести их в порядке убывания количества дублей? Напишите SQL-запрос.
SELECT ma.id_contract, COUNT(*) AS cnt FROM migr_address ma GROUP BY ma.id_contract HAVING COUNT(*) > 1 ORDER BY cnt DESC;
Тестовые данные:
INSERT INTO migr_address ma (ma.id_contract, ma.v_address) VALUES (1, 'Адрес 1'); INSERT INTO migr_address ma (ma.id_contract, ma.v_address) VALUES (2, 'Адрес 2'); INSERT INTO migr_address ma (ma.id_contract, ma.v_address) VALUES (2, 'Адрес 3'); INSERT INTO migr_address ma (ma.id_contract, ma.v_address) VALUES (3, 'Адрес 4'); INSERT INTO migr_address ma (ma.id_contract, ma.v_address) VALUES (3, 'Адрес 5'); INSERT INTO migr_address ma (ma.id_contract, ma.v_address) VALUES (3, 'Адрес 6'); INSERT INTO migr_address ma (ma.id_contract, ma.v_address) VALUES (2, 'Адрес 7'); COMMIT WORK; /
P.S.
Конфигурация СУБД — Oracle Database 11g Express Edition Release 11.2.0.2.0
IDE — PL/SQL Developer Version 11.0.6.1776