2016-09-16 15 views
0

N.B.私はApache Derbyで働くソリューションを探していますApache Derbyのカラム一致に基づいて、あるテーブルから別のテーブルへのSQLの更新

私は2つのSQLテーブルを持っています。 linksと呼ばれ、最初は、ここでの整数はオブジェクトのIDがリンクされているフォーム

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

のリンクが含まれています。リンクのtargetは、redirid欄にそれをID redirtargetのオブジェクトにリダイレクトされなければならない場合には

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

redirと呼ばれる2番目の表は、リダイレクトリンクが含まれています。

ここでid列にあるredirのすべてのターゲットを関連するredirtargetに置き換えて、linksテーブルを更新したいとします。

たとえば、上の2つの表(省略記号なし)を指定すると、更新指示では、列の521が456をlinksに置き換えます。

私は自分で作業指示を見つけることができませんでした。私は

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

ようなものを試してみたが、それがコンパイルされません(具体的には、ダービーはUPDATESETの間にカンマで指摘します)。誰にでも助けますか?

答えて

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条件がredirテーブル内の一致が実際にある場所linksの行のみが更新されることを保証します。

+0

これはうまく動作します、ありがとう! :) – oowekyala

関連する問題