SQL 根据 Apache Derby 上的列匹配从一个 table 更新到另一个

SQL update from one table to another based on column match on Apache Derby

N.B。我正在寻找适用于 Apache Derby

的解决方案

我有两个 sql table。第一个称为 links,包含 link 形式的

SOURCE    | TARGET
1234      | 456
15        | 625
...       | ...

这里的整数是被 linked 对象的 ID。第二个 table,称为 redir,包含重定向 links:

ID        | REDIRTARGET
456       | 521
198       | 140
...       | ...

如果link的targetredirid列,那么必须重定向到id为redirtarget的对象.

现在,我想通过将 redirid 列中的所有目标替换为关联的 redirtarget 来更新我的 links table ].

例如,给定上面的两个 table(没有省略号),更新指令会将 linkstarget 列中的 456 替换为 521。

我无法自己找到工作说明。我尝试过

UPDATE links,redir SET target=redirtarget WHERE id=target

但这不会编译(具体来说,derby 指出 UPDATESET 之间的逗号)。帮助任何人?

您不能在更新列表中指定多个 table。

如果 redir table 中的 ID 是唯一的,您应该可以这样做:

update links
  set target = (select redirtarget 
                from redir
                where redir.id = links.target)
where exists (select *
              from redir
              where redir.id = links.target);

where 条件确保只有 links 中的行在 redir table.

中实际匹配的行被更新