【问题标题】:Oracle SQL: merge with more conditions than matched/not matchedOracle SQL:合并条件多于匹配/不匹配
【发布时间】:2011-12-28 14:59:00
【问题描述】:

我需要一些有关 Oracle 中 MERGE 命令的帮助。基本上我有这个命令,但我想再优化一点:

MERGE INTO swap USING dual ON (SELECT id FROM student WHERE number = '123') 
WHEN MATCHED THEN 
  UPDATE SET swapped = 1, last_swap = sysdate 
WHEN NOT MATCHED THEN 
  INSERT (student_id, swapped, last_swap) VALUES ((SELECT id FROM student WHERE number= '123'), 1, sysdate)

现在这将在 SWAP 表上插入或更新一个寄存器。但是,如果 STUDENT 表上没有具有该数字的学生,我想防止它在 student_id 上插入 NULL(我不想简单地不允许 SWAP 表的 sudent_id 上的 NULL 值)。 另一件事,我重复SELECT id FROM student WHERE number = '123' 两次,我怎样才能将其更改为只执行一次(将结果存储在别名或其他东西中)?

提前非常感谢!

【问题讨论】:

    标签: sql oracle merge


    【解决方案1】:

    您的合并语句应使用“从学生中选择”作为您要合并的表。 您也可以发布一些示例数据吗?

    以下查询假设 ID 是您要合并的列,它不能为空。

    MERGE INTO swap 
          USING (SELECT id FROM student WHERE number = '123' and id is not null) stu
          on (stu.id = swap.id)
    WHEN MATCHED THEN 
      UPDATE SET swapped = 1, last_swap = sysdate 
    WHEN NOT MATCHED THEN 
      INSERT (student_id, swapped, last_swap) VALUES (stu.id , 1, sysdate);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-21
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多