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的target
在redir
的id
列,那么必须重定向到id为redirtarget
的对象.
现在,我想通过将 redir
的 id
列中的所有目标替换为关联的 redirtarget
来更新我的 links
table ].
例如,给定上面的两个 table(没有省略号),更新指令会将 links
的 target
列中的 456 替换为 521。
我无法自己找到工作说明。我尝试过
UPDATE links,redir SET target=redirtarget WHERE id=target
但这不会编译(具体来说,derby 指出 UPDATE
和 SET
之间的逗号)。帮助任何人?
您不能在更新列表中指定多个 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.
中实际匹配的行被更新
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的target
在redir
的id
列,那么必须重定向到id为redirtarget
的对象.
现在,我想通过将 redir
的 id
列中的所有目标替换为关联的 redirtarget
来更新我的 links
table ].
例如,给定上面的两个 table(没有省略号),更新指令会将 links
的 target
列中的 456 替换为 521。
我无法自己找到工作说明。我尝试过
UPDATE links,redir SET target=redirtarget WHERE id=target
但这不会编译(具体来说,derby 指出 UPDATE
和 SET
之间的逗号)。帮助任何人?
您不能在更新列表中指定多个 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.