基于Apache Derby

时间:2016-09-16 22:42:45

标签: sql sql-update derby

N.B。我正在寻找一个解决Apache Derby的解决方案

我有两个sql表。第一个名为links,包含表单

的链接
SOURCE    | TARGET
1234      | 456
15        | 625
...       | ...

这里的整数是被链接对象的id。第二个表名为redir,包含重定向链接:

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

如果链接的target位于id的{​​{1}}列中,则必须将其重定向到ID为redir的对象。

现在,我想更新redirtarget表,方法是将相关links替换id redirredirtarget列中的所有目标。

例如,给定上面的两个表(没有省略号),更新指令将用target links列中的521替换456。

我自己找不到工作指示了。我尝试过像

这样的事情
UPDATE links,redir SET target=redirtarget WHERE id=target

但不会编译(具体而言,德比指出UPDATESET之间的逗号)。帮助任何人?

1 个答案:

答案 0 :(得分:1)

您无法在UPDATE列表中指定多个表。

如果redir表中的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表中实际匹配的地方才会更新{<1}}。