SQL:他のテーブルからカラム値をコピーしたい
問題
SQLにおいて、他のテーブルから値をコピーしたい。例えば、
create table foo (f_id integer, a integer, b integer);
create table bar (b_id integer, c integer, d integer);
というテーブルがあり、両者ともに値が格納されているものとする。このc,dの値をa,bにコピーしたいのである。もちろんidが同一の行についてだ。
これはRDBによって便利なコマンドがあるようだが、標準的なSQLで行うには、
update foo set a=(select c from bar where f_id=b_id), b=(select d 云々
となるだろうか。面倒でやってられない。おそらくスピードも遅いだろう。
SQL標準での解法
MERGE (SQL)というものがあるようだ。ただし、以下のDBしかサポートしていないという。
- Oracle
- DB2
- Microsoft SQL Server
- Firebird
MySQLが無いというのが、あまり知られていない原因だろう。しかし、ここで対象とするのはFirebirdなので問題無い。MERGEを見てみると、Firebird2.1以降でサポートしているようだ。
Firebirdでの操作
実際にやってみる。
merge into foo using bar on f_id=b_id when matched then update set a=c, b = d
問題は無いようだ。
ディスカッション
コメント一覧
まだ、コメントがありません