0

メインテーブルが1つあります(t1)

id           value     group
------------------------------
5            22        1 
6            55        1 
7            18        2 
8            11        2  

そしてキャッシュテーブル(t2)

id           value     group
------------------------------
1            12        1
2            30        1
3            18        2
4            11        2 

メインテーブルは自動インクリメントされるため、データが保存されるたびにテーブルがクリアされ、新しいIDが作成され、毎回増加します。

t2.idをt1.idで更新して、一致させる必要があります。

キャッシュテーブル(t2)に必要な結果:

id           value     group
------------------------------
5            12        1
6            30        1
7            18        2
8            11        2 

試行1:

UPDATE t1, t2 SET t1.id=t2.id WHERE t1.id < t2.id ORDER BY id ASC

試行2:

UPDATE t1, t2 SET t1.id = t2.id WHERE t1.id IS < MIN(t2.id) ORDER BY t1.id ASC

試行3:

  UPDATE t1
  INNER JOIN (
    SELECT
      MIN(t1.id) AS ID
    FROM t1
    GROUP BY ID) m ON t1.ID = m.ID
  INNER JOIN t2 ON t1.ID = t2.ID
4

2 に答える 2

1

私の試み、試してみて、私に知らせてください:

  Update cache t2
  set t2.id = t2.id + 
    (select min(t1.id)-min(t2.id) from main t1, cache t2);

編集:

2 段階のクエリを実行できれば、はるかに簡単になります。

 DECLARE diffValue INTEGER;
 SELECT min(t1.id)-min(t2.id) into diffValue from main t1, cache t2;
 UPDATE cache t2 set t2.id = t2.id + diffValue;
于 2012-10-27T15:27:31.313 に答える
0

更新構文では結合を使用できません。

まず、テーブル内のすべてのレコードを削除します。

DELETE * FROM t2;

次に、新しいデータを書き込みます。

INSERT INTO t2
(t2.id, t2.value, t2.group)
SELECT t1.id, t1.value, t1.group FROM t1

これはあなたが望んでいたものですか?

于 2012-10-27T15:28:03.277 に答える