我很好奇如何使用内部连接更新表格。如果我运行下面的语句:在mysql中使用内部连接语法更新表格
update tbl1 a
inner join tbl2 b using (id)
set a.val = b.val;
什么tbl1
恰好记录不具有在tbl2
比赛?他们会不会被更新并保留在tbl1
?他们会被删除?
我意识到我可以运行这个并得到答案,但我也对这是如何在幕后工作的机制感兴趣,并希望有人能为我阐明这一点。
我很好奇如何使用内部连接更新表格。如果我运行下面的语句:在mysql中使用内部连接语法更新表格
update tbl1 a
inner join tbl2 b using (id)
set a.val = b.val;
什么tbl1
恰好记录不具有在tbl2
比赛?他们会不会被更新并保留在tbl1
?他们会被删除?
我意识到我可以运行这个并得到答案,但我也对这是如何在幕后工作的机制感兴趣,并希望有人能为我阐明这一点。
update语句在tbl1上运行。
连接提供了一个过滤器,用于指定要在tbl1中更新哪些行。
作为额外的好处,连接也为列提供了一个值。
update语句不能也不能删除表中的行。
问:tbl1
中的记录在tbl2
中不匹配会发生什么?
A:他们不会被更新,因为他们没有匹配tbl2
。根据定义,当两个表中至少有一个匹配项时,INNER JOIN
关键字将返回行。可以从您的表中删除记录的唯一关键字是DELETE
DML。
我想我想了解的是在背景中发生了什么:如果你做了左或右连接,例如?那么mysql会为没有匹配的行设置值?我试图了解背景中发生了什么的机制。例如,在“tbl2”没有匹配行的左连接场景中它是否为空? – Alex 2012-08-15 00:35:18
如果tbl2没有匹配的行,那么a.val将被设置为NULL。 – 2012-08-15 00:37:27
那么内部连接与左连接的更新如何不同?看起来他们在这里是同样的事情。 – Alex 2012-08-15 02:04:22