0

我有一个主表(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,每次都向上。

我需要用 t1.id 更新 t2.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);

编辑:

如果您可以进行两步查询,那就容易多了。

 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 回答