根据来自mySQL中另一个表的AVG值将多个记录插入到表中

时间:2019-06-06 20:06:53

标签: mysql

我有一个带有2个表的mysql数据库。第一个“规格”是规格表,第二个“日志”是包含先前测量值的记录条目的表。记录的每个零件都通过零件编号和测试度量来标识。对于任何给定的零件号,可能有许多日志条目,但是在“ spec”数据库中给出实际规格的每个零件号只有1个条目。我需要做的是获取“日志”表中每个不同部分的测试测量平均值,并将其作为新的规范插入“规格”表中。日志表将已被更正以除去异常值。

我已经能够更新“规范”表中的现有记录,但是无法插入不存在的记录。

这有效

update no_flow.spec s join
 (select part, round(avg(cc),0) as avgcc
 from no_flow.log l
 group by part) l
 on s.part = l.part and l.avgcc > 0
 set s.cc = l.avgcc;

这不起作用

INSERT INTO no_flow.spec set (part, cc) s join
  SELECT part, avg(cc)
  FROM no_flow.log l
  WHERE id != 0
  values (l.part, l.avgcc);

建议?

1 个答案:

答案 0 :(得分:0)

如果规范中有部分唯一索引,则可以使用INSERT ... ON DUPLICATE KEY UPDATE Syntax

它看起来像这样:

INSERT INTO noflow.spec (part, cc)
 select
   part as logPart,
   round(avg(cc),0) as avgcc
 from
   no_flow.log
 group
   by logPart
ON DUPLICATE KEY UPDATE cc = VALUES(cc);

这会将内部SELECT中的所有记录插入到规范表中。当给定的插入记录遇到重复的键错误(即,当前部件号已经有记录)时,ON DUPLICATE KEY子句通过将其cc列设置为等于{{1}来更新现有记录。 }尝试插入的记录上的列。