关于merge into的使用,为何只能update不能insert,0行更新

代码如下

 create table tbo(
id number(10),
name VARCHAR2(20) NOT NULL
)

MERGE INTO tbo t
USING (SELECT id FROM tbo WHERE id=1) hs
ON (t.id = hs.id)
WHEN MATCHED THEN UPDATE SET t.name='anne'
WHEN NOT MATCHED THEN INSERT VALUES(1,'anne');

图片说明

跟数据有关系,你贴出部分测试数据。

merge into a
using on b
是a表与b表比较,a存在,b不存在 nothing
a存在,b也存在 update
a不存在,b存在 insert b into a
a不存在,b也不存在 nothing

MERGE INTO tbo t
USING (SELECT 1 id, 'anne' name FROM dual) hs
ON (t.id = hs.id)
WHEN MATCHED THEN
UPDATE SET t.name = 'anne'
WHEN NOT MATCHED THEN
INSERT VALUES (hs.id, hs.name);

如果你的id是主键的话,hs表就只有一行为1的记录。