【问题标题】:MySQL: Update all rows in 2 table matching results of another queryMySQL:更新另一个查询的 2 个表匹配结果中的所有行
【发布时间】:2013-11-11 18:03:14
【问题描述】:

我有两个具有相同 id 的表,我想用第二个表中的值更改这两个表的 id。

例如: 表_1

ID    TITLE    CONTENT    AUTHOR
 1     aaa      abcd        aaaa
 2     aaa      abcd        aaaa
 3     aaa      abcd        aaaa
 4     aaa      abcd        aaaa

表_2:

ID post_id    post_title    pos_key    value
 1    1        aaa            a_key        2
 2    1        aaa            E_key     2000
 3    2        aaa            b_key        3
 4    2        aaa            b_key        3
 5    2        aaa            E_key     2500
 6    3        aaa            c_key        4
 7    3        aaa            d_key        5
 8    3        aaa            E_key     3000
 9    4        aaa            f_key        6
10    4        aaa            E_key     3500

如何从 Table_2 的值中更新所有 Table_1 ID 和 Table_2 post_id 在 post_key 行上具有 E_key 的值?。

这就是我想要的两个表:

表_1

  ID   TITLE    CONTENT     AUTHOR
2000     aaa      abcd        aaaa
2500     aaa      abcd        aaaa
3000     aaa      abcd        aaaa
3500     aaa      abcd        aaaa

表_2:

ID   post_id    post_title    pos_key    value
 1      2000     aaa            a_key        2
 2      2000     aaa            E_key     2000
 3      2500     aaa            b_key        3
 4      2500     aaa            b_key        3
 5      2500     aaa            E_key     2500
 6      3000     aaa            c_key        4
 7      3000     aaa            d_key        5
 8      3000     aaa            E_key     3000
 9      3500     aaa            f_key        6
10      3500     aaa            E_key     3500

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    你试过什么?一个好的开始是编写一个SELECT 查询,它同时提取旧值和新值;从那里将其重写为UPDATE 通常很简单。我相信这会做到:

    UPDATE T1
    SET ID = T2.Value
    FROM    Table_1 AS T1
        INNER JOIN Table_2 AS T2 ON T1.ID = T2.post_id
    WHERE
        T2.pos_key = 'E_key'
    
    UPDATE T2
    SET post_id = NewIDs.Value
    FROM    Table_2 AS T2
        INNER JOIN Table_2 AS NewIDs ON T2.post_id = NewIDs.post_id
    WHERE
        NewIDs.pos_key = 'E_key'
    

    如果我的 MySQL 关闭了,我深表歉意,我通常使用 MS SQL。

    【讨论】:

    • 感谢您的帮助,不幸的是,两个查询都不起作用,第一个仅适用于选择查询...第二个不适用于选择和更新。
    • “不工作”并没有告诉我任何有用的信息。你有错误吗?更新的记录少于预期?没有任何?记录的更新与您的预期不同?
    • 好吧,我试试这个查询,它正在工作。 UPDATE Table_1 AS T1 INNER JOIN Table_2 AS T2 ON T1.ID = T2.post_id SET T1.ID = T2.Value WHERE T2.pos_key = 'E_key' UPDATE Table_2 AS T2 INNER JOIN Table_2 AS NewIDs ON T2.post_id = NewIDs.post_id SET T2.post_id = NewIDs.Value WHERE NewIDs.pos_key = 'E_key' 谢谢
    猜你喜欢
    • 2011-04-14
    • 2022-01-16
    • 1970-01-01
    • 2021-07-23
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多