【问题标题】:update a table using inner join syntax in mysql在 mysql 中使用内部连接语法更新表
【发布时间】:2012-08-15 00:29:00
【问题描述】:

我很好奇使用内部联接更新表的工作原理。如果我运行以下语句:

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

tbl1 中与 tbl2 不匹配的记录会发生什么情况?它们会不会被更新并保留在tbl1 中?会被删除吗?

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

【问题讨论】:

    标签: mysql sql join sql-update inner-join


    【解决方案1】:

    更新语句在 tbl1 上运行。

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

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

    更新语句不会也不能从表中删除行。

    【讨论】:

    • 我想我想了解的是背景中发生的事情:例如,如果您进行左连接或右连接会怎样? mysql 会为没有匹配的行设置什么值?我试图了解背景中发生的事情的机制。例如,在tbl2 没有匹配行的左连接场景中,它是否会为空?
    • 如果 tbl2 没有匹配的行,那么 a.val 将被设置为 NULL。
    • 那么内连接与左连接的更新会有什么不同呢?看来它们在这里是一样的。
    【解决方案2】:

    问:tbl1 中与 tbl2 中不匹配的记录会怎样?

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

    【讨论】:

      猜你喜欢
      • 2015-06-11
      • 1970-01-01
      • 2019-06-25
      • 2013-12-10
      • 2022-12-10
      • 2017-12-18
      • 1970-01-01
      • 2011-01-08
      • 2015-09-21
      相关资源
      最近更新 更多