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 を使用しようとしました。

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 に答える