mysql - 将新表与旧表连接,更新不匹配的 ID

标签 mysql join min

我有一个主表(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

最佳答案

我的尝试,尝试让我知道:

  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;

关于mysql - 将新表与旧表连接,更新不匹配的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13101440/

相关文章:

c++ - std::min() 参数中的计算是否会产生计算开销?

MySQL 从不同服务器追加/插入

jquery - 使用node.js向mysql数据库添加数据

php - 使用 DISTINCT 和 ORDER BY 进行 MySQL 查询

mysql - 在 JOIN 上排除 MySQL 中的结果

sql - 在 postgres 中两个表之间的联接、聚合和转换

mysql - 在查找最小值(SQL)的情况下,当列具有相同值时如何获取第一行

javascript - JS : find lowest/highest number from array within a specific range

java - 将Java连接到MySQL数据库

将联接与 CSV writerow 相结合的 Pythonic 方式