トップ «前の日記(2009-07-04) 最新 次の日記(2009-07-06)» 編集

十日日記


2009-07-05

Link Accessで他のテーブルの値を元に更新する

他のテーブルの値を元にテーブルを更新するときがある。たとえば下の画像で、左を「tblA」、右を「tblB」としよう。tblBには更新情報が入っていて、tblAのlabelをtblBのnewlabelで置き換えることを考える。

テーブル一覧

つまり、上のテーブルに対して実行したらtblAが

Accessでの結果

のようになるクエリが書きたいとしよう。

PostgreSQLでは、こうした場合にはサブクエリを使う。いまの例なら

   update tblA
   set label = (select newlabel from tblB where tblA.cd = tblB.cd)
   where tblA.cd in (select cd from tblB where tblA.cd = tblB.cd);

のようにする。ここで、2番目のselect文ではjoin句を使うことができるが、最初のset中のselect文のwhereをjoin句で置き換えることはできないことに注意。また、次のようにupdate文に対してfrom句を使うこともできるが、これはPostgreSQLの独自拡張である。

   update tblA
   set label = (select newlabel from tblB where tblA.cd = tblB.cd)
   from tblB where tblA.cd = tblB.cd;

ところが、Accessで上のようなことをすると、「更新可能なクエリであることが必要です」と言われて更新することができない。「AccessはUPDATEでサブクエリが使えない」と書いたことがある。

先週末、このことを思い出した。Accessで業務アプリを作成してきた人が隣にいたので尋ねてみると、次のように書けばいいのだそうだ。

   update tblA inner join tblB on tblA.cd = tblB.cd
   set tblA.label = tblB.newlabel

実際やってみると、あっさりと更新できてしまった。UPDATE文の中でjoin句が使えるとは知らなかった。(PostgreSQLでは不可能。)GUIで行なう方法は、「他のテーブルを基にテーブルを更新する」というヘルプファイルに書かれている。

それにしても、where句がないのに限定されたレコードだけが更新されるのが不思議だ。ためしにAccess式のSQL文をMySQL 4.1.20(データベースはMyISAM)で行なってみると、エラーこそ出なかったが全部の値が変わってしまう。

MySQLでの結果

   update tblA inner join tblB on tblA.cd = tblB.cd
   set tblA.label = tblB.newlabel
   where tblA.cd = tblB.cd

のようにwhere句を付ければ望みの結果が得られる。サブクエリよりもあっさりしているので、これからMySQLではこのように書こう。

Tags: PC
本日のツッコミ(全4件) [ツッコミを入れる]
Link 通りすがり (2012-01-19 11:52)

on tblA.cd = tblB.cd で条件指定していると思ってますが、<br>いかがでしょうか?

Link Access修行中 (2017-01-26 11:09)

Accessのテーブル間のデータ更新で大変参考になりました。

Link vardenafil 10mg (2018-04-04 11:10)

Okay you are right, truly PHP is a open source and its help we can take free from any discussion board or website since it occurs at this place at this site.

Link sildenafil (2018-09-09 04:01)

What's up children, you all should watch hilarious video lessons, but remember that first study then enjoyment okay.

[]


プロフィール

渡辺 慎太郎(na@10days.org)

分野別表示

Admin | Client | Dev | Excel | Linux | PC | PDA | Web | iPad | web | 家電 | 文具 | | 英語 | 言語 | | 音楽

月別表示

1999|07|
2003|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|

最近の記事

雨量情報 dictionary.com Yahoo google Yahoo! 路線情報 東京アメッシュ l-mura l-aka l-momo 目次 r-mura r-aka r-daidai r-kiiro asahi.com nogulabo r-sora r-midori r-midori r-momo