Server Version: WI-V2.1.0.17798 Firebird 2.1
База:
Код: Выделить всё
SET SQL DIALECT 3;
SET NAMES WIN1251;
SET CLIENTLIB 'FBCLIENT.dll';
CREATE DATABASE 'testdb.fdb'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 4096
DEFAULT CHARACTER SET WIN1251;
CREATE GENERATOR GEN_ULRELTXTREL_ID;
SET GENERATOR GEN_ULRELTXTREL_ID TO 3;
CREATE TABLE KLADR (
ADRID BIGINT NOT NULL,
ADRNAME VARCHAR(40),
ADRSOCR VARCHAR(10)
);
CREATE TABLE ULRELTXTREL (
PKULT INTEGER NOT NULL,
ADRNAME VARCHAR(40),
ADRSOCR VARCHAR(10),
SUL VARCHAR(40)
);
ALTER TABLE KLADR ADD CONSTRAINT PK_KLADR PRIMARY KEY (ADRID);
ALTER TABLE ULRELTXTREL ADD CONSTRAINT PK_ULRELTXTREL PRIMARY KEY (PKULT);
CREATE INDEX ULRELTXTREL_ALL ON ULRELTXTREL (ADRNAME, ADRSOCR, SUL);
SET TERM ^ ;
/* Trigger: ULRELTXTREL_BI */
CREATE TRIGGER ULRELTXTREL_BI FOR ULRELTXTREL
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (new.pkult is null) then
new.pkult = gen_id(gen_ulreltxtrel_id,1);
end
^
SET TERM ; ^
Данные:
Код: Выделить всё
insert into KLADR
(ADRID,
ADRNAME,
ADRSOCR
)
values
(111111111111,
'ЛЕНИНА',
'УЛ'
)
Если выполнить такой запрос:
Код: Выделить всё
update or insert into ULRELTXTREL
(ADRNAME,ADRSOCR,SUL)
values(
(select (ADRNAME) from KLADR where ADRID=111111111111),
(select (ADRSOCR) from KLADR where ADRID=111111111111),
'УЛ ЛЕНИНА'
)
MATCHING(ADRNAME,ADRSOCR,SUL)
То вставки не происходит. И в статистике происходит только 2 индексированных чтения из KLADR.
А если вставить несуществующую в KLADR запись
к примеру:
Код: Выделить всё
update or insert into ULRELTXTREL
(ADRNAME,ADRSOCR,SUL)
values(
(select (ADRNAME) from KLADR where ADRID=111111111112),
(select (ADRSOCR) from KLADR where ADRID=111111111112),
'ПЕР ЛЕНИНА'
)
MATCHING(ADRNAME,ADRSOCR,SUL)
то чтений естественно нет, но вставка с нуллами уже происходит.