我们可以在合并中有两个匹配的子句

时间:2016-08-25 06:16:54

标签: oracle

编写单个查询,删除等级大于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);

上述查询有什么问题?我们不能在合并中指定两个匹配的条件吗?

1 个答案:

答案 0 :(得分:1)

  

"我们不能在合并中指定两个匹配的条件吗?"

syntax rules in the Oracle documentation指定两个子句:

  • 对现有行执行更新和/或删除的 merge_update_clause
  • 执行新行插入的 merge_insert_clause

也就是说,这些条款是根据它们实施的行为来定义的,而不是它们是匹配还是不匹配。因为在MATCHED时插入或在NOT MATCHED时更新是没有意义的。

因此,WHEN MATCHED THEN关键字短语只能在MERGE语句中出现一次,因为语法只允许一个 merge_update_clause