Я сталкиваются с проблемой с помощью следующего запроса:Слить и исходная таблица множественным соответствует
merge into table2 d
using (
select firstname, lastname, max(id) id
from table1 t1
group by firstname, lastname
having count(0) = 1
) s
on (d.firstname=s.firstname and d.lastname=s.lastname)
when matched then update set t1_id = s.id;
Если несколько строк в table2 матче положение о, тогда я получаю «Ошибка SQL: ORA-30926: не удалось получить стабильный набор строк в исходных таблицах "
Вы знаете какой-либо способ фильтрации и просто игнорировать эти« дубликаты »? Спасибо.
EDIT
@Polppan, ваш запрос данных образца привело меня очень странным образом:
здесь некоторые примерные данные:
table1
ID firstname lastname
1 John Doe
2 John DOE
3 Jane Doe
4 Jane Doe
(обратите внимание на верхний)
table2
t1_ID firstname lastname
null John Doe
null Jane Doe
null Jane Doe
сейчас, я не мог воспроизвести UCE ошибку с этими данными до:
- пункт о является "ВЕРХНИЙ (d.firstname) = ВЕРХНИЙ (s.firstname) и верхней части (d.lastname) = ВЕРХНИЙ (s.lastname)" (который является что у меня есть, так как мне нужно регистронезависимое соответствие)
- одну из линий в table1 имеет DOE в верхнем регистре
Любая идея, почему?
Я надеюсь, что вы не используете 'счетчик (0)', потому что вы думаете, что это быстрее, чем 'COUNT (*)' –
I уже используют DISTINCT, но с тем же результатом. На самом деле, я думаю, что проблема находится в предложении ON (редактирование начального сообщения). (и я использую count (0), потому что фрагмент, который я скопировал, использовал это ;-)) – bertrand
@bertrand Можете ли вы предоставить образцы данных? – user75ponic