我发现我公司的 ETL 过程在检查登台数据库中的 ID 是否已在真实数据库中使用的过程中存在一个重大错误。从理论上讲,这个过程应该迭代直到它找到一个尚未使用的 ID,但是在研究中它并没有这样做,只在停止之前迭代一次。
BEGIN
-- there is only ever 1 row in staging.
declare id1 char(12) default (select id from stg.extraction);
loop_label: Loop
if id1 not in (select id from main.extraction) Then
leave loop_label;
end if;
set id1=id1+1;
leave loop_label;
End Loop;
update stg.extraction
set id=id1;
END
我尝试了几种可能的解决方案,但似乎都没有改变。我想我需要将它转换为 while 循环,但我不确定。
不要循环执行。在单个多表
UPDATE
和/或INSERT ... SELECT ... LEFT JOIN ... IS NULL
.更多详细信息:http: //mysql.rjweb.org/doc.php/staging_table#normalization