2012-08-15 77 views
0

我很好奇如何使用内部连接更新表格。如果我运行下面的语句:在mysql中使用内部连接语法更新表格

update tbl1 a 
inner join tbl2 b using (id) 
set a.val = b.val; 

什么tbl1恰好记录不具有在tbl2比赛?他们会不会被更新并保留在tbl1?他们会被删除?

我意识到我可以运行这个并得到答案,但我也对这是如何在幕后工作的机制感兴趣,并希望有人能为我阐明这一点。

回答

1

update语句在tbl1上运行。

连接提供了一个过滤器,用于指定要在tbl1中更新哪些行。

作为额外的好处,连接也为列提供了一个值。

update语句不能也不能删除表中的行。

+0

我想我想了解的是在背景中发生了什么:如果你做了左或右连接,例如?那么mysql会为没有匹配的行设置值?我试图了解背景中发生了什么的机制。例如,在“tbl2”没有匹配行的左连接场景中它是否为空? – Alex 2012-08-15 00:35:18

+0

如果tbl2没有匹配的行,那么a.val将被设置为NULL。 – 2012-08-15 00:37:27

+0

那么内部连接与左连接的更新如何不同?看起来他们在这里是同样的事情。 – Alex 2012-08-15 02:04:22

1

问:tbl1中的记录在tbl2中不匹配会发生什么?

A:他们不会被更新,因为他们没有匹配tbl2。根据定义,当两个表中至少有一个匹配项时,INNER JOIN关键字将返回行。可以从您的表中删除记录的唯一关键字是DELETE DML。