0
UPDATE wlog 
  SET g_log = ( SELECT glog_id 
                FROM glog_wlog 
                WHERE w_id=wlog.id limit 5) 
WHERE g_log is NULL;

我的旧数据库由映射表组成"glog_wlog"。现在我需要改变它的引用方式。上面的代码工作正常。但是limit 5真的什么都做不了。我在表格中有超过 100 万个重新编码。我不想一口气将它们全部转换。那么如何将其分解为任何给定的数字?

4

1 回答 1

2

您可以使用 CTE 来限制您正在查看的记录以执行此类子集。

例如:

with wlog_targets as (
    select id from wlog
    where g_log is null
    limit 5)
update wlog
set
    g_log = g.glog_id
from wlog_targets w
inner join glog_wlog g
    on w.id = g.w_id
where 
    wlog.id = w.id;

此方法使用 wlog_targets CTE 提取一小部分 wlog 记录进行处理。

如果选择的 5 条记录在 glog_wlog 中没有条目,则这确实存在问题,则不会更新任何内容。此外,CTE 未排序,因此可能返回任何 5 条记录。

于 2013-03-05T11:14:56.607 回答