对两个表中的值进行一些计算并将其存储在第三个表mysql中

时间:2016-03-17 15:56:14

标签: mysql sql database select

表1

| email           | result  |
----------------------------
| abc@gmail.com   |0.12      |
| dsv@gmail.com   |0.23      |
| rthgmail.com    | 0.45     |
| hfg@gmail.com   |0.56      |
| yyt@gmail.com   | 0.78     |
| hjg@gmail.com   | 0.35     |

表2

 | resource        |
 -------------------
 | 0.5             |

表3

| temp            |
-------------------
|NULL             |

现在我想分别从table1和table2添加结果和资源给电子邮件abc@gmail.com并将结果保存在table3中。我想每次都更新table3。

我尝试了以下但不起作用:

UPDATE table3 SET temp = table1.result + table2.resource WHERE email = 'abc@gmail.com'

我怎么能这样做呢?

3 个答案:

答案 0 :(得分:1)

您可以使用子查询执行此操作:

UPDATE Table3 t
SET t.temp = (SELECT s.result+p.resource
              FROM table1 s INNER JOIN table2 p
              ON(s.email = 'abc@gmail.com'))

如果你的Table3还没有数据:

INSERT INTO Table3 
(SELECT s.result+p.resource
 FROM table1 s INNER JOIN table2 p
  ON(s.email = 'abc@gmail.com'))

答案 1 :(得分:0)

好像是一个奇怪的请求,但是你需要update join

UPDATE table3 t3 CROSS JOIN
       table2 t2 CROSS JOIN JOIN
       (SELECT SUM(t1.result) FROM table1 t1 WHERE t1.email = 'abc@gmail.com') t1
   SET t3.temp = t1.result + t2.resource; 

你确定你真的不想要insert吗?

答案 2 :(得分:0)

表2和表3中只有一行数据吗?在这种情况下,您可以这样做:

UPDATE Table3 SET temp=SELECT SUM(result)+(SELECT MAX(resource) from table2) from table1 WHERE email = 'abc@gmail.com'

除MAX之外的任何聚合函数(min,avg等)都可以完成这项工作(如果你在table2中只有一行)。而且,对于table2和table3,身份列也会更好。