【问题标题】:Mysql Inserting Or Updating one table column data to another table with Matching valusMysql将一个表列数据插入或更新到另一个具有匹配值的表
【发布时间】:2016-05-31 21:58:31
【问题描述】:

我对 Mysql 有点陌生,我的问题是,如何更新或插入 Table_1 列数据到 Table_2 列数据并匹配来自 的相关 ID表_1

例如

          Table_1                       Table_2                      

        rand  | cpn                   rand   |  cpn     
         1        4                     2        0
         2        7                     3        0
         3        2                     5        0
         4        1                     1        0
         5        7                     4        0

上面提到的表是我的表的当前结构,我的输出应该是这样的,

      Table_2

   rand   |  cpn     
     2        7
     3        2
     5        7
     1        4
     4        1 

我想匹配 table_1 中的 id 并在 table_2 中更新,因此在此先感谢 :)

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    这应该有效:

    update table2 t2 set cpn = (select cpn from table1 where rand = t2.rand)
    

    【讨论】:

      【解决方案2】:

      在 mysql 中,您可以在更新中使用连接来获得预期的结果:

      update table2 t2 inner join table1 t1 on t2.rand=t1.rand
      set t2.cpn=t1.cpn 
      

      【讨论】:

        【解决方案3】:

        好吧,你应该 JOIN 表格,这样你就可以使用这些值,如下所示:

        UPDATE Table_2 t2 
        LEFT JOIN Table_1 t1 on t2.rand = t1.rand
        SET t2.cpn = t1.cpn;
        

        【讨论】:

        • 那不是在 Table_2 中插入行
        • @BerndBuffen 你不能插入匹配的数据,只能更新它。
        • 感谢您的回复 Noy,您建议的查询正在执行,但没有发生任何事情 0 行受影响:(
        • @Crysis set 语句中有一个错字,你应该已经发现了。但是,我不会使用左连接,因为这会用空值覆盖非/匹配值。
        • @BerndBuffen 它会插入不匹配的记录,但这不是问题。
        【解决方案4】:

        你可以使用它。它插入或更新记录。您只需要在 rand 上有一个唯一的 INDEX 或 PRIMARY KEY。

        INSERT INTO Table_2
         (SELECT * FROM Table_1 )
         ON DUPLICATE KEY UPDATE cpn = VALUES(cpn);
        

        示例

        MariaDB []>
        MariaDB []> CREATE TABLE `Table_1` (
            ->   `rand` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
            ->   `cpn` INT(11) DEFAULT NULL,
            ->   PRIMARY KEY (`rand`)
            -> ) ENGINE=INNODB DEFAULT CHARSET=utf8;
        Query OK, 0 rows affected (0.16 sec)
        
        MariaDB []>
        MariaDB []> INSERT INTO `Table_1` (`rand`, `cpn`)
            -> VALUES
            -> (1, 4),
            -> (2, 7),
            -> (3, 2),
            -> (4, 1),
            -> (5, 7);
        Query OK, 5 rows affected (0.02 sec)
        Records: 5  Duplicates: 0  Warnings: 0
        
        MariaDB []>
        MariaDB []>
        MariaDB []> CREATE TABLE `Table_2` (
            ->   `rand` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
            ->   `cpn` INT(11) DEFAULT NULL,
            ->   PRIMARY KEY (`rand`)
            -> ) ENGINE=INNODB DEFAULT CHARSET=utf8;
        Query OK, 0 rows affected (0.30 sec)
        
        MariaDB []>
        MariaDB []> INSERT INTO `Table_2` (`rand`, `cpn`)
            -> VALUES
            -> (1, 0),
            -> (2, 0),
            -> (3, 0),
            -> (4, 0),
            -> (5, 0);
        Query OK, 5 rows affected (0.00 sec)
        Records: 5  Duplicates: 0  Warnings: 0
        
        MariaDB []>
        MariaDB []>
        MariaDB []> SELECT * FROM Table_1;
        +------+------+
        | rand | cpn  |
        +------+------+
        |    1 |    4 |
        |    2 |    7 |
        |    3 |    2 |
        |    4 |    1 |
        |    5 |    7 |
        +------+------+
        5 rows in set (0.00 sec)
        
        MariaDB []>
        MariaDB []> SELECT * FROM Table_2;
        +------+------+
        | rand | cpn  |
        +------+------+
        |    1 |    0 |
        |    2 |    0 |
        |    3 |    0 |
        |    4 |    0 |
        |    5 |    0 |
        +------+------+
        5 rows in set (0.00 sec)
        
        MariaDB []>
        MariaDB []> INSERT INTO Table_2
            ->  (SELECT * FROM Table_1 )
            ->  ON DUPLICATE KEY UPDATE cpn = VALUES(cpn);
        Query OK, 10 rows affected (0.00 sec)
        Records: 5  Duplicates: 5  Warnings: 0
        
        MariaDB []>
        MariaDB []> SELECT * FROM Table_2;
        +------+------+
        | rand | cpn  |
        +------+------+
        |    1 |    4 |
        |    2 |    7 |
        |    3 |    2 |
        |    4 |    1 |
        |    5 |    7 |
        +------+------+
        5 rows in set (0.00 sec)
        
        MariaDB []>
        

        【讨论】:

        • 不要投反对票。如果您构建一切正确,它会工作 100% 好。查看我更改后的答案!!!
        猜你喜欢
        • 2016-08-20
        • 2015-10-27
        • 1970-01-01
        • 2013-08-15
        • 1970-01-01
        • 2012-09-19
        • 2019-10-27
        • 2018-04-05
        • 1970-01-01
        相关资源
        最近更新 更多