Можно ли использовать оператор слияния для одной таблицы? Я хочу проверить перед вставкой, что если такой же набор значений уже существует, то эта запись должна быть обновлена, а если нет, то она должна быть вставлена. Я искал в Интернете, но я получил пример слияния с 2 таблицей. Я пытался на одном столе, но я не смог получить положительные результаты. Значения, которые я пытаюсь проверить, будут динамическими. Я хочу использовать этот запрос в моем приложении.
Я пытаюсь проверить (в приведенном ниже случае только столбец "Major"), совпадают ли два столбца, тогда эту запись следует обновить, а если нет, то ее следует вставить.
Я создал образец таблицы ученика. ниже запрос.
create table student (sid int,name varchar(20),major varchar(10),gpa float,tutorid int, PRIMARY KEY (sid))
insert into student values(101,'Bill','CIS',3.45,102)
insert into student values(102,'Mary','CIS',3.1,null)
insert into student values(103,'Sue','Marketing',2.95,102)
insert into student values(104,'Tom','Finanace',3.5,106)
insert into student values(105,'Alex','CIS',2.75,106)
insert into student values(106,'Sam','Marketing',3.25,103)
insert into student values(107,'Joan','Finance',2.9,102)
Ниже приведен запрос, который я использую
merge into student a
using (select name,major from student) b
on (a.major=b.major)
when matched then
update set a.name='Rahul'
when not matched then
insert(a.SID,a.major) values(123, 'Temp')
Я получаю сообщение об ошибке ниже
ORA-30926: не удалось получить стабильный набор строк в исходных таблицах
Может быть, я делаю вещи совершенно неправильно. Может кто-нибудь, пожалуйста, помогите мне.