MYSQL使用它们的值更新两个表

时间:2015-08-17 14:24:54

标签: mysql sql

我想实现以下目标:

如果在表A中得到一个空的FIELD1,则获取表B中FIELD1为空的FIELD2的值。

然后将表A中的ID放在表B中的FIELD1中。

但我不知道如何在整个表A中启动它。

之前:

表A:

ID  FIELD1 FIELD2
1          RANDOM VALUE
2          RANDOM VALUE
3          RANDOM VALUE

表B:

ID  FIELD1 FIELD2
1   1234   XXXXXXXXXXXX
2          XXXXXXXXXXXX
3          XXXXXXXXXXXX
4   5678   XXXXXXXXXXXX
5          XXXXXXXXXXXX

后:

表A:

ID  FIELD1        FIELD2
1   XXXXXXXXXXXX  RANDOM VALUE
2   XXXXXXXXXXXX  RANDOM VALUE
3   XXXXXXXXXXXX  RANDOM VALUE

表B:

ID  FIELD1 FIELD2
1   1234   XXXXXXXXXXXX
2   1      XXXXXXXXXXXX
3   2      XXXXXXXXXXXX
4   5678   XXXXXXXXXXXX
5   3      XXXXXXXXXXXX

1 个答案:

答案 0 :(得分:0)

您可以通过枚举每个表中的值来完成此操作。所以,从表b开始:

set @rn := 0;

update b
    set field1 = (@rn := @rn + 1)
    where b.field1 is null
    order by b.id;

现在您已拥有此信息,请执行以下类似的过程:

set @rn := 0;
update a join
       (select a.*, (@rn := @rn + 1) as seqnum
        from a
        where a.field1 is null
        order by a.id
       ) aa
       on a.id = aa.id join
       b
       on a.seqnum = b.field1
    set a.field1 = b.field2;

这个过程的一个主要警告:它假定新的序列号与现有的数字不冲突。有一些技巧可以用来避免问题。例如,如果所有现有值均为正数,则可以将值枚举为负数(减1)。其余逻辑将起作用。