【问题标题】:Combine two MySQL tables into one (plus arithmetic)将两个 MySQL 表合二为一(加算术)
【发布时间】:2012-03-06 17:35:13
【问题描述】:

这应该是一个简单的问题,但我似乎找不到确切的解决方案。这基本上就是我所拥有的:

table_1:

id*   scenario*    val1     val2
---   --------     -----    ------
AC1    1            2        0
AC2    1            1        0 
AC1    2            4        0
AC2    2            3        0

table_2:

id*     val3
---     ------
AC1       4
AC2       6

我想要做的就是更新 table_1 的 val2 ,其中场景 = 1 使用 table_2 中的值和匹配的 id 但我希望它等于 val1 + val3 (我不知道如何减少混淆)。所以对于这个例子,我希望 table_1 变成:

id*   scenario*    val1     val2
---   --------     ------   --------
AC1    1            2        6
AC2    1            1        7 
AC1    2            4        0
AC2    2            3        0

我认为这可以通过一个简单的 MySQL 语句来完成,但我不知道如何使用第一个表的条件(“INSERT INTO table_1 WHERE scenario=1 SELECT...”??)和来自两个不同表的两列的算术运算。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    一个非常简单易读的 JOIN 就可以了;

    UPDATE table_1 t1
    JOIN table_2 t2 ON t1.id = t2.id
    SET t1.val2 = t1.val1 + t2.val3
    WHERE scenario = 1;
    

    演示here.

    【讨论】:

    • 感谢您的快速回复! SQL Fiddle 看起来是一个非常有用的工具,可以帮助我理解逻辑。
    【解决方案2】:

    试试这个:

    UPDATE table_1 
    SET val2 = val1 + 
        (SELECT val3 FROM table_2
         WHERE id = table_1.id
         LIMIT 0,1)
    WHERE scenario = 1
    

    【讨论】:

    • @JohnSmith: 很高兴帮助你:)
    【解决方案3】:

    我假设您将对场景值进行硬编码,否则无法将 table_2 数据链接到 table_1 场景。

    所以我会这样做:

    UPDATE table_1 set val2 = val1 + (select val3 from FROM table_2 WHERE table_2.id = table_1.id)
    WHERE scenario = 1
    

    【讨论】:

      【解决方案4】:

      试试这个:

      UPDATE table_1 a join table_2 b on a.id = b.id
      set a.val2 = a.val1 + b.val3 
      where a.scenario = 1
      

      【讨论】:

      • thnx 指出这一点,我在 sql server 上测试它并没有注意到问题是针对 mysql 的。
      【解决方案5】:

      试试这个查询 -

      UPDATE table_1 t1
        JOIN table_2 t2
          ON t1.id = t2.id
        SET t1.val2 = t1.val1 + t2.val3
      WHERE t1.scenario = 1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-06
        • 1970-01-01
        • 1970-01-01
        • 2019-10-26
        • 2017-10-01
        • 1970-01-01
        相关资源
        最近更新 更多