[英]Merge and source table multiple matches
我遇到以下查詢問題:
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中的多個行與ON子句匹配,那么我會收到“ SQL錯誤:ORA-30926:無法在源表中獲得穩定的行集”
您知道什么方法可以過濾,而忽略那些“重復項”嗎? 謝謝。
編輯
@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
現在,在以下情況之前,我無法使用這些數據重現錯誤:
知道為什么嗎?
嘗試使用DISTINCT
MERGE INTO table2 d
USING (SELECT DISTINCT ((firstname))fname, ((lastname))lname,max(id) id
FROM table1 t1
GROUP BY firstname, lastname
HAVING COUNT (0) = 1
) s
ON ( upper(d.firstname) = upper(fname)
AND upper(lastname) = upper(lname))
WHEN MATCHED
THEN
UPDATE SET id = s.id;
更新1
MERGE INTO table2 d
USING (SELECT DISTINCT upper((firstname))fname, upper((lastname))lname,max(id) id
FROM table1 t1
GROUP BY firstname, lastname
HAVING COUNT (0) = 1
) s
ON ( upper(d.firstname) = upper(fname)
AND upper(lastname) = upper(lname))
WHEN MATCHED
THEN
UPDATE SET id = s.id;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.