Есть пустая таблица

CREATE TABLE KLADR_ZIP (
    ZIP       INTEGER NOT NULL,
    KLADR_ID  BIGINT NOT NULL,
    HOUSES    VARCHAR(50)
);

ALTER TABLE KLADR_ZIP ADD CONSTRAINT PK_KLADR_ZIP PRIMARY KEY (ZIP,
KLADR_ID);

Хотим ее заполнить таким запросом:

insert into kladr_zip (zip, kladr_id)
select distinct trim(zip) zip, substring(kladr from 1 for 2)||
substring(kladr from 4 for 12) name from "DOMA.DBF"
union
select distinct zip, kladr_id name from kladr where zip is not null

И неожиданно получаем фигвам в виде

Invalid insert or update value(s): object columns are
constrained - no 2 table rows can have duplicate column values.
violation of PRIMARY or UNIQUE KEY constraint "PK_KLADR_ZIP" on table
"KLADR_ZIP".

Хотя вроде как оба запрос distinct и union между ними страхует от
повторяющихся записей.
Ладно, фиг с тобой золотая рыбка, напишем так:

insert into kladr_zip (zip, kladr_id)
select distinct zip, name from (
 select distinct trim(zip) zip, substring(kladr from 1 for 2)||
substring(kladr from 4 for 12) name from "DOMA.DBF"
 union
 select distinct zip, kladr_id name from kladr where zip is not null
)

И получаем то же самое в той же проекции.
Интересно, это у меня что-то с головой, или у сервера?

WI-V2.1.0.17798 Firebird 2.1

Ответить