基本上我正在创建一个汇总表。
问题是有时主表中的数据是手动修改的。我正在使用ON DUPLICATE KEY UPDATE,但是我还需要像ON MISSING KEY DELETE这样的东西。摘要需要更新为已更改的数据。
真正的最佳解决方案是删除所有摘要记录并重新运行INSERT SELECT查询吗?这似乎不是一个好主意。
不在select查询中的任何键都不应该在摘要表中。
答案 0 :(得分:1)
填写summary_table后,您可以这样做:
DELETE s FROM summary_table s LEFT OUTER JOIN original_table o ON s.id = o.id
WHERE o.id IS NULL;
这将从summary_table中删除original_table中不再存在id的任何行。
我认为你没有办法在一个声明中做到这一点。
答案 1 :(得分:0)
我不确定我理解,但听起来你想要在主表上为INSERT和UPDATE添加添加到摘要的触发器,以及从摘要中减去DELETE的另一个触发器...
答案 2 :(得分:0)
如果摘要查询很快并且更改是零星的,则可以重新运行摘要。您可以考虑使用触发器,以便在删除时删除1,在插入时添加1