РТЫ 30926: не мог получить устойчивое множество строк в исходных таблицах

Я добираюсь

РТЫ 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) который также имеет данные.

Почему эта ошибка прибыла бы и как она может быть разрешена?

124
задан diziaq 10 March 2016 в 09:45
поделиться

2 ответа

Обычно это вызвано дублированием в запросе, указанном в предложении 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';
189
ответ дан 24 November 2019 в 01:07
поделиться

Вы, вероятно, пытаетесь чтобы обновить одну и ту же строку целевой таблицы несколько раз. Я только что столкнулся с той же проблемой в разработанном мной операторе слияния. Убедитесь, что ваше обновление не касается одной и той же записи более одного раза при выполнении слияния.

40
ответ дан 24 November 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: