Mysql:用另一个表的选择最大值更新表[重复]

Posted

技术标签:

【中文标题】Mysql:用另一个表的选择最大值更新表[重复]【英文标题】:Mysql: Update table with select max of another table [duplicate] 【发布时间】:2017-06-05 14:38:57 【问题描述】:

我的 mysql 服务器中有 2 个不同的数据库。

First table DB1.contacts:

id | name | code
1  | foo  | 157
2  | foo  | 95
3  | foo  | 210

Second table DB2.paperworks:

id | name | contact_id
1  | foo  | 0

我要更新 DB2.paperworks,设置 DB1.contacts.contacts 表的 DB2.paperworks.contact_id = max(DB1.contacts.code) 其中 DB2.paperworks.name = DB1.contacts.name

我想要的输出应该是:

查询 DB2.paperworks 后的第二张表:

id | name | contact_id
1  | foo  | 210

这是我的查询:

UPDATE DB2.paperworks
JOIN DB1.contacts
ON DB2.paperworks.name = DB1.contacts.name
SET DB2.paperworks.contact_id = DB1.contacts.code

我不明白如何写 che "MAX(code)" 条件。你能帮帮我吗?

【问题讨论】:

不一定重复,因为这也可以通过使用相关子查询的简单更新来完成,如下面的答案所示。 @SlimsGhost,大多数问题都有多个可能的答案。这并不意味着他们不能有重复。我只是试图引导 OP 回答一个似乎与他自己相关的问题。 @Chris,很公平,只是不希望它只用一个指向可能不是理想答案的指针而关闭。 【参考方案1】:

update 的稍微简单的形式就可以解决问题:

UPDATE DB2.paperworks
SET DB2.paperworks.contact_id = (
    select max(DB1.contacts.code)
    from DB1.contacts
    where DB1.contacts.name = DB2.paperworks.name
    group by DB1.contacts.code
);

【讨论】:

【参考方案2】:

试试这个:

UPDATE DB2.paperworks
SET DB2.paperworks.contact_id = (
    SELECT MAX(DB1.contacts.code)
    FROM DB1.contacts
    WHERE DB2.paperworks.name = DB1.contacts.name
)

【讨论】:

以上是关于Mysql:用另一个表的选择最大值更新表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

用另一个 MySQL 表的值更新一个 MySQL 表(原始表的数据类型是 JSOn)

MySQL 用另一个表的值更新一个表 - 我可以在 bigquery 中使用它吗?

用另一个表的数据更新一个表

用另一个表的值更新表

用另一个表中的随机条目更新表的列

使用派生键值用另一个表的数据更新一个表