编写单个查询,删除等级大于150的记录。如果存在记录,则更新成绩并将每个成员添加25作为内部。如果记录不存在且等级为25,则插入记录。
alter table P add constraint fk_fileId_p foreign key (fileID)
references Ss(id)
这工作正常,但是当我修改下面的语句时,它不起作用:
Merge into employeegrades empg
using (select id, name from temp_emp) e
on (empg.id= e.id)
when matched then
update set empg.grades = empg.grades + 25
delete where empg.grades > 150
when not matched then insert (id,grades) values (e.id, 25);
上述查询有什么问题?我们不能在合并中指定两个匹配的条件吗?
答案 0 :(得分:1)
"我们不能在合并中指定两个匹配的条件吗?"
syntax rules in the Oracle documentation指定两个子句:
也就是说,这些条款是根据它们实施的行为来定义的,而不是它们是匹配还是不匹配。因为在MATCHED时插入或在NOT MATCHED时更新是没有意义的。
因此,WHEN MATCHED THEN关键字短语只能在MERGE语句中出现一次,因为语法只允许一个 merge_update_clause 。