我很好奇如何使用内部联接更新表。如果我运行以下声明:
update tbl1 a
inner join tbl2 b using (id)
set a.val = b.val;
tbl1
中没有匹配的tbl2
记录会发生什么?它们是否会被更新并保留在tbl1
中?它们会被删除吗?
我意识到我可以运行这个并得到答案,但我也对这在幕后如何工作的机制感兴趣,并希望有人可以为我阐明这一点。
答案 0 :(得分:1)
问: tbl1
中tbl2
中没有匹配的记录会怎样?
答:由于tbl2
没有匹配,因此不会更新。根据定义,INNER JOIN
关键字在两个表中至少有一个匹配时返回行。唯一可以从表中删除记录的关键字是DELETE
DML。
答案 1 :(得分:1)
更新语句在tbl1上运行。
连接提供了一个过滤器,用于指定要在tbl1中更新的行。
作为额外的奖励,联接也为列提供了值。
update语句不会也不能从表中删除行。