MySQL:更新另一个表

时间:2018-01-01 21:36:25

标签: mysql sql join inner-join crud

我有一个表table1,其列o_idPKipaddressb_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行

我有另一张表table2 id,其中的列为PKipaddressb_idenv

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_idtable1.b_id = table2.id

在这里,我想要从第一个表格中的o_id更新第二个表格中的o_id。 我还想在第二个表中的b_id更新第一个表中的id

我写了下面的查询。

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行,看看它看起来如何?我不想一次更新整个表格

2 个答案:

答案 0 :(得分:0)

你无法做到你想要的。 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')

答案 1 :(得分:0)

您无法在更新查询中直接使用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)