2012-08-15 80 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。