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
redir
列redirtarget
列中的所有目标。
例如,给定上面的两个表(没有省略号),更新指令将用target
links
列中的521替换456。
我自己找不到工作指示了。我尝试过像
这样的事情UPDATE links,redir SET target=redirtarget WHERE id=target
但不会编译(具体而言,德比指出UPDATE
和SET
之间的逗号)。帮助任何人?
答案 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}}。