Я пытаюсь выполнить слияние в таблицу (назовем ее table1
) с table2
. В состоянии USING мне нужна третья таблица (table3
). Эта третья таблица содержит некоторые идентификаторы, которые мне нужны в table1
. Упрощенная версия моего слияния выглядит следующим образом:не удалось получить стабильный набор строк error
MERGE INTO table1 a
USING (
SELECT ID, address
FROM table3 b
Where address IN
(
SELECT address
FROM table3
WHERE address IS NOT NULL
AND ID> 0
GROUP BY address
HAVING COUNT(*) = 1
)
) c
ON (a.address = c.address)
WHEN MATCHED THEN
UPDATE SET a.ID = c.ID
WHERE a.ID = 0
Я знаю, что ошибка я получаю обычно вызывается запрос в ПРИМЕНЕНИИ статьи, но теоретически эта проблема должна быть устранена путем подсчета (*) = 1 условие , У меня есть дубликаты в table2
, но все они должны получить ID от table3
или ID 0, если адрес дублируется в table3
. Идентификаторы уникальны для адреса, поэтому они должны быть разными.
P.S. Это слияние выполняется автоматически сценарием, поэтому я могу изменить запрос, чтобы добавить дополнительные условия/ограничения, но я не могу изменить структуру [это означает, что я должен использовать эти 3 таблицы, как они есть).
Надеюсь, это имеет смысл. Любые идеи, почему это все еще не работает для меня?
Вы говорите, что вы не включили часть, относящуюся к таблице2, однако ошибка связана с этим. Обновите свой примерный запрос, чтобы включить его, а также некоторые примерные данные ввода для всех трех таблиц. Может быть, все, что вам нужно, является отличным, но мы пока не можем сказать. – Boneist
@Boneist, моя ошибка там. Я забыл отредактировать эту часть. c относится к выбору в таблице 3. псевдоним отображается в запросе. – AnnaB
Может ли отдельный идентификатор помочь, если у меня есть условие count (*) = 1? Как я уже говорил, идентификаторы не повторяются, они уникальны. Итак, если мое мышление верное, это не должно быть проблемой. – AnnaB