2016-09-16 1 views
0

N.B. Я ищу решение, работающее на Apache DerbyОбновление SQL из одной таблицы в другую на основе совпадения столбцов на Apache Derby

У меня есть две таблицы sql. Первый из них, называемого links, содержат ссылки вида

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

где целые числа здесь являются идентификаторы объектов, связаны между собой. Вторая таблица, называется redir, содержит перенаправление ссылки:

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

Если target звена находится в id колонки redir, то он должен быть перенаправлен к объекту ID redirtarget.

Теперь я хотел бы обновить links таблицы, заменив все цели, которые находятся в id колонки redir ассоциированой redirtarget.

Например, приведенные выше таблицы (без эллипсов), инструкция обновления заменит 456 на 521 в столбце targetlinks.

Я не смог найти работу самостоятельно. Я пытался что-то вроде

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

, но это не будет компилировать (в частности, котелок указывает на запятая между UPDATE и SET). Помогите кому-нибудь?

ответ

1

Вы не можете указать несколько таблиц в списке UPDATE.

Если ID в таблице REDIR является уникальным, вы должны быть в состоянии сделать что-то вроде этого:

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 таблице ,

+0

Это хорошо работает, спасибо! :) – oowekyala

Смежные вопросы