меня Таблицы T1 и еженедельно, как показано ниже:REPLACE INTO и дублированием UPDATE не работает
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;
Но этот запрос добавляет новую запись в еженедельную таблицу и не заменяет ее. Что не так?
У вас есть порядок полей смешались в запросе. –
Во-первых, без первичного ключа вы не можете ожидать, что 'ON DUPLICATE KEY' будет работать. Это очевидно, просто посмотрите на фразу (на дубликат _key_). Во-вторых, я не думаю, что «REPLACE INTO» можно использовать с «ON DUPLICATE KEY», потому что вместо этого пытается использовать строку, сопоставляемую ключами, а также дублирующимся ключом. Таким образом, в этом случае вы поручаете MySQL выполнять две операции слияния. – marekful
@ MarcellFülöp: Нужно ли быть «ПЕРВИЧНЫМ» или просто «УНИКАЛЬНЫМ»? –