【发布时间】: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' 两次,我怎样才能将其更改为只执行一次(将结果存储在别名或其他东西中)?
提前非常感谢!
【问题讨论】: