MYSQL 更新基于行索引等于另一个表中的 ID

标签 mysql sql sql-update mysql-variables

我有两张 table 。我想根据表 2 中的相同行索引更新表 1 中的行。 ID 不匹配,但表 2 中的 ID 与行索引匹配。表 2 中总会有更多数据,但我不在乎是否遗漏了额外的行。

如何在 mysql UPDATE 语句中实现此目的?

   table 1      ______________      table 2     _____________
   Row number  |  id  | value |    Row number | id  | value |
               |--------------|               |-----|-------|
        1      |  2   |   A   |        1      |  1  |   W   |
        2      |  4   |   B   |        2      |  2  |   X   |
        3      |  6   |   C   |        3      |  3  |   Y   |
                                       4      |  4  |   Z   |

  to:
    table 1      ______________    
    Row number |  id  | value |   
               |--------------|   
        1      |  2   |   W   |   
        2      |  4   |   X   |  
        3      |  6   |   Y   |    

最佳答案

这可行,但不太漂亮。

set @c=0;
update t1
join (
    select tx.id,t2.value
    from t2
    join (
        select @c:=@c+1 as rownum, value, id
        from (
            select * from t1  order by id
        ) t3
    ) tx
    on t2.id=tx.rownum) tupdate
on t1.id = tupdate.id
set t1.value=tupdate.value;

其背后的基本点是使用变量来计算行数,然后使用它进行连接。我最终使用了多个嵌套选择,因为要求是更新 t1,但只有在制作了包含行数的版本之后。

需要在开始处设置set,以防止重复计数。请参阅MySQL - Get row number on select寻找灵感。

关于MYSQL 更新基于行索引等于另一个表中的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39368675/

相关文章:

java - 每秒更新一次 MySQL 数据库

sql - 当 select 没有行时获取案例结果字段

mysql - 先获取最后一条记录,其余按升序排列

php - 使用mysql处理多个用户

php - Mysql查询执行失败

python - sql 喜欢交替

sql - 使用 PostgreSQL 中的查询结果更新列

PHP mysqli 只显示一个用户

sql - 从pl sql中的日期中提取数字

sql - 当列不存在时,Postgres 返回默认值