我想实现以下目标:
如果在表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
答案 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)。其余逻辑将起作用。