2

我有 T1 表和每周表,如下所示:

CREATE TABLE T1 (
  C1 varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  C2 varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
);

CREATE TABLE weekly (
  C1 varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  C2 varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  year year(4) DEFAULT NULL,
  week int(11) NOT NULL DEFAULT '0',
  count int(11)
);

基本上,我想每年和每周按 c1、c2 分组所有值的总和。需要将这些值存储到“每周”表中。此查询应每天运行,如果条目已存在则替换。

所以我尝试使用替换成。

replace into weekly select year(timestamp) as year,  week(timestamp) as week, C1, C2,  count(*) as count  from T1  where timestamp >= 20130606 and timestamp <= 20130613 group by C1,C2;

但是此查询正在将新条目添加到每周表中,而不是替换它。怎么了?

4

1 回答 1

1

您需要用于替换的密钥才能按预期工作。

REPLACE 的工作方式与 INSERT 完全相同,只是如果表中的旧行与 PRIMARY KEY 或 UNIQUE 索引的新行具有相同的值,则在插入新行之前删除旧行。请参见第 13.2.5 节,“INSERT 语法”。

https://dev.mysql.com/doc/refman/5.5/en/replace.html

于 2013-06-13T17:25:10.923 回答