mysql:更新另一个表中pk的id值

kzipqqlq  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(354)

这个问题在这里已经有答案了

mysql错误:update和limit的用法不正确(5个答案)
sql:使用带限制的内部联接进行更新(2个答案)
两年前关门了。
我有一张table table1 其中有列 o_id 作为 PK , ipaddress , b_id ```
o_id ip b_id
9205 10.10.10.10 null
9206 10.10.10.11 null
9207 10.10.10.12 null

---1000多行
我还有一张table
table2 `id` 其中列为 `PK` ,  `ipaddress` ,  `b_id` ,  `env` ```
id      ip              o_id  env
18356   10.10.10.10     null  dev
18357   10.10.10.11     null  prod
18358   10.10.10.12     null  qa

---1000多行
现在,如果 ipaddress 表和表中的匹配项 table2.env IN ('dev', 'qa') ,然后我要更新这两个表,以便 table2.o_id = table1.o_id 以及 table1.b_id = table2.id 我想更新一下 o_id 在第二张table上 o_id 在第一张table上。我也想更新一下 b_id 在第一个表中 id 在第二张table上。
我写了下面的问题。

update table1 t1
inner join table2 t2 on t1.ip = t2.ip 
set t1.b_id = t2.id,
     t2.o_id = t1.o_id
where t2.env IN ('dev', 'qa')
limit 2

我犯了个错误 incorrect usage of limit .
我只想先更新2行,看看它看起来怎么样?我不想一次更新整个表

yks3o0rb

yks3o0rb1#

你不能随心所欲。mysql不允许 limit 加入。可以使用子查询限制行数:

update table1 t1 inner join
       table2 t2
       on t1.ip = t2.ip join
       (select ip
        from table1 t1
        limit 2
       ) t1ip
       on t1.ip = t1ip.ip
    set t1.b_id = t2.id,
        t2.o_id = t1.o_id
where t2.env IN ('dev', 'qa')
9bfwbjaz

9bfwbjaz2#

你不能使用 Limit 直接在更新查询中。你应该试试那样的东西;

update table1 set col1 = '' where b_id IN (
select t1.b_id table1 t1 from
inner join table2 t2 on t1.ip = t2.ip 
set t1.b_id = t2.id,
     t2.o_id = t1.o_id
where t2.env IN ('dev', 'qa')
limit 2)

相关问题