我很好奇如何使用內部連接更新表格。如果我運行下面的語句:在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