Я добираюсь
РТЫ 30926: не мог получить устойчивое множество строк в исходных таблицах
в следующем запросе:
MERGE INTO table_1 a
USING
(SELECT a.ROWID row_id, 'Y'
FROM table_1 a ,table_2 b ,table_3 c
WHERE a.mbr = c.mbr
AND b.head = c.head
AND b.type_of_action <> '6') src
ON ( a.ROWID = src.row_id )
WHEN MATCHED THEN UPDATE SET in_correct = 'Y';
Я имею, работал table_1
это имеет данные, и также я имею, выполнил внутренний запрос (src
) который также имеет данные.
Почему эта ошибка прибыла бы и как она может быть разрешена?
Обычно это вызвано дублированием в запросе, указанном в предложении USING. Это, вероятно, означает, что TABLE_A является родительской таблицей и один и тот же ROWID возвращается несколько раз.
Вы можете быстро решить проблему, используя DISTINCT в своем запросе (фактически, если «Y» - постоянное значение, вам даже не нужно вводить его в запрос).
Предполагая, что ваш запрос правильный (вы не знаете свои таблицы), вы можете сделать что-то вроде этого:
MERGE INTO table_1 a
USING
(SELECT distinct ta.ROWID row_id
FROM table_1 a ,table_2 b ,table_3 c
WHERE a.mbr = c.mbr
AND b.head = c.head
AND b.type_of_action <> '6') src
ON ( a.ROWID = src.row_id )
WHEN MATCHED THEN UPDATE SET in_correct = 'Y';
Вы, вероятно, пытаетесь чтобы обновить одну и ту же строку целевой таблицы несколько раз. Я только что столкнулся с той же проблемой в разработанном мной операторе слияния. Убедитесь, что ваше обновление не касается одной и той же записи более одного раза при выполнении слияния.