Привет всем. :) Из большой таблички нужно удалить записи по сложному условию. План для условия вполне нормальный. Но когда включаешь его в delete выплывает NATURAL.
Есть ли какой-нибудь способ не проходить для этого всю табличку? Можно конечно преобразовать в execute block, но хотелось бы более декларативного и стандартного способа. Может что предполагается в 3-ке или на будущее? :) Пример запроса на удаление: delete from SYMP2REMEDS sr where sr.ID in ( select sr_dst.ID from SYMP2REMEDS sr_dst inner join SYMP2REMEDS_ORIGIN sro on sro.OBJ_ID = sr_dst.ID inner join SYMP2REMEDS sr_src on sr_src.ID = sro.ORIGIN_ID inner join SYMP2REMEDS_ORIGIN sro1 on sro1.OBJ_ID = sr_dst.ID where sr_dst.SYM_ID = ?--?DST_ID and sr_src.SYM_ID = ?--?SRC_ID group by 1 having count (*) = 1 ) План: PLAN SORT (JOIN (JOIN (SR_DST INDEX (PK_SYMP2REMEDS), SRO INDEX (FK_SYMP2REMEDS_ORIGIN_OBJ_ID), SRO1 INDEX (FK_SYMP2REMEDS_ORIGIN_OBJ_ID)), SR_SRC INDEX (PK_SYMP2REMEDS))) PLAN (SR NATURAL) Выжимка из табличек: CREATE TABLE SYMP2REMEDS ( ID D_BIG_ID, SYM_ID D_ID, CONSTRAINT PK_SYMP2REMEDS PRIMARY KEY (ID), CONSTRAINT FK_SYMP2REMEDS_SYM_ID FOREIGN KEY (SYM_ID) REFERENCES SYMPTOMS (ID) ON DELETE CASCADE ); CREATE TABLE SYMP2REMEDS_ORIGIN ( OBJ_ID D_BIG_ID, ORIGIN_ID D_BIG_ID, CONSTRAINT FK_SYMP2REMEDS_ORIGIN_OBJ_ID FOREIGN KEY (OBJ_ID) REFERENCES SYMP2REMEDS (ID) ON DELETE CASCADE; CONSTRAINT FK_SYMP2REMEDS_ORIGIN_ORIGIN_ID FOREIGN KEY (ORIGIN_ID) REFERENCES SYMP2REMEDS (ID) ON DELETE CASCADE; ); -- Александр Замараев

