我有一个带有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);
建议?
答案 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}来更新现有记录。 }尝试插入的记录上的列。