MySQL でサブクエリを利用して他のテーブルのデータを元に処理をする

2010年12月 9日 22:12 MySQL でサブクエリを利用して他のテーブルのデータを元に処理をする

サブクエリを使うことによって、テーブル1の検索結果を元に、テーブル2に何らかの処理を行なう、というようなことが可能です。

例えば以下のように架空のショッピングサイトの、ユーザーのIDとアドレスを格納した「UserList」と、注文毎のIDと商品名と購入者のユーザーIDを格納した「OrderList」という二種類のテーブルがある場合。

UserList
UserID MailAddress
1 yukimidaifuku_daisuki@abe-tatsuya.com
2 nattou_kirai@abe-tatsuya.com
3 syabusyabu_tabetai@abe-tatsuya.com
OrderList
OrderID OrderItem OrderUserID
1 しゃぶしゃぶ用鍋 3
2 しゃぶしゃぶ用松坂牛 3
3 雪見だいふく とろける生キャラメル味 20個セット 1
4 雪見だいふく W生チョコレート味 20個セット 1
5 納豆撲滅装置 2

この場合、例えば「yukimidaifuku_daisuki@abe-tatsuya.com」というメールアドレスのユーザーが注文した商品をリストアップしたい、というときには、

  1. まず、テーブル「UserList」を検索して「yukimidaifuku_daisuki@abe-tatsuya.com」というアドレスのユーザーのIDを取得
  2. 取得したユーザーのIDを元に「OrderList」を検索して、注文した商品リストを取得

という手順になるわけですが、この処理をサブクエリを使うことによって、以下のようにできます。

select OrderList.OrderItem
from OrderList
where OrderList.OrderUserID = (select UserList.UserID
                               from UserList
                               where UserList.MailAddress = 'yukimidaifuku_daisuki@abe-tatsuya.com');

こんな感じで、where句の中に括弧でくくった別の select文を書くことで、サブクエリとして実行できます。

update文やdelete文でも、同様にwhere句の中にサブクエリを使うことができます。

他にも、

update TABLE1
set TABLE1.col1 = (select TABLE2.col2 from TABLE2 where TABLE2.col3 = 'hoge')
where TABLE1.col4 = 'huga';

こんな感じの使い方もできます。
update文で更新する値そのものを、別のテーブルから引っ張ってくる、というわけですね。

なおMySQLでは、update や delete でサブクエリを使う場合は「テーブル1の何らかの検索結果を元に、同じテーブル1に対して処理を実行する」ということができないようです(select文では可能)。

関連するブログ記事
スポンサード リンク
カテゴリー
MySQL
タグ
delete | MySQL | RDBMS | select | SQL | update | コマンドライン

コメント(7) | トラックバック(0)

 

2010年11月の読了本まとめ

2010年12月 4日 19:36 2010年11月の読了本まとめ
盗人の報復
盗人の報復
マーセデス・ラッキー著。
貧民街に住む盗人の少年スキッフの視点から見たヴァルデマールの首都ヘイヴンは、今までの真面目な<使者>の見ているヘイヴンとはまるで別世界で新鮮だった。面白い。
スキッフはもちろんのこと、今まであんまり何考えてるかわからなかったアルベリッヒもいっぱい喋ってて嬉しい。
舞台が狭くて主要人物が少ないと、ほんとに描写がリアルでいい話を書くなあ、ラッキーさん。
11月3日読了。
昆虫擬態の観察日記
昆虫擬態の観察日記
海野和男著。
昆虫の擬態は本当に興味深い。
代表的な擬態のパターン別に、わかりやすい解説と共に綺麗なフルカラーの写真をふんだんに使って紹介している本。
写真を眺めているだけで、昆虫たちの擬態の緻密さに圧倒される。
11月3日読了。
王の帰還 上
王の帰還 上
J.R.R.トールキン著。
全体として絶望的な戦争の描写の中、メリーとピピンが頑張ってた。
ギムリとレゴラスの影が薄いのがちょっと残念。
11月16日読了。
琥珀
琥珀
アンドリュー・ロス著。
琥珀がどのようにして生まれ、どこでどのようにして発見されるのか、という基礎的なところから、琥珀の中に埋もれている生物をどのようにして同定するのかという方法論まで、琥珀の入門的な内容を解説した本。
全ページフルカラーで写真が豊富なので、とてもわかりやすかった。
生物の同定方法の解説のおかげで、節足動物入門としても機能している。
11月17日読了。
おとぎ話の生物学
おとぎ話の生物学
蓮実香佑著。
和洋様々なおとぎ話をベースに、連想ゲーム的に様々な雑学が学べる本。
タイトルに「生物学」ってある割には、それほど生物学って感じでもなかったかな。
ちゃんとした学説っぽいのと、ソースのない「都市伝説」レベルの雑学とが混在していてちょっと「ん?」ってなるところもあるけど、軽く読んで楽しめて良かった。
オオカミに関する考察が印象的。
11月22日読了。
悪の教典 上
悪の教典 上
貴志祐介著。
やっぱ貴志さんの小説は面白いなあ。
特に本作は今までの色んな作品のテイストがてんこ盛りで、ファンには嬉しい。
ハスミン、真っ黒なのはいいけど、彼の最終的な目的が全然見えてこないのが凄く気になる。
まさか性欲が理由じゃないよなw
共感力に乏しい天才キャラなわりに欲求には素直なところがありそうで意外にないパターンな気がする。
11月24日読了。
悪の教典 下
悪の教典 下
貴志祐介著。
ハスミン、冷静に淡々と目的のために屍を重ねていくタイプのキャラクターなのかと思ってけど、凄く行き当たりばったりな人だった。
『バトル・ロワイアル』を思わせる壮絶な展開は凄かったけど、こんなに行き当たりばったりでよく今までヘマしなかったな、と(アメリカでヘマしちゃってたみたいだけど)。
終盤の伏線の回収の仕方は、わかりやすかったけど見事だったので、ハスミンの性格とは正反対に、ストーリーは行き当たりばったりではなく予定されていた通りにまとまったんだな、という印象。
11月28日読了。

2010年11月の読了本は7冊でした。
PSPのタクティクスオウガが発売されて以来、本読むペースが格段に落ちた!

関連するブログ記事
カテゴリー
読書
タグ
J.R.R.トールキン | おとぎ話の生物学 | アンドリュー・ロス | マーセデス・ラッキー | ヴァルデマールの絆 | ヴァルデマール年代記 | 悪の教典 | 指輪物語 | 昆虫擬態の観察日記 | 海野和男 | 王の帰還 | 琥珀 | 盗人の報復 | 蓮実香佑 | 貴志祐介

コメント(6) | トラックバック(0)

 

このブログについて

阿部辰也

Webコンサルタントやシステムエンジニア、執筆業などをやっている、グッドホープ代表・阿部辰也のブログです。
Web技術系のTipsから仕事の話、趣味の話まで色々と。
人生は所詮生まれてから死ぬまでの壮大な暇つぶし。
だったら有意義に暇をつぶして生きましょー。

阿部辰也へのお仕事のご依頼・問合せはこちらからどうぞ。

Twitter: @t_abe
読書メーター: ID:Tatsuya

このブログのサイトマップ
このブログのはてなブックマーク数

Feed/RSS購読

タグクラウド

最近のトラックバック

阿部辰也の著書

77のキーワードで知る インターネットで稼ぐ 図解 ブログ・メルマガ・Webサイト構築の基本

77のキーワードで知る インターネットで稼ぐ 図解 ブログ・メルマガ・Webサイト構築の基本

頑張って書いたのに、出版後すぐに出版社が倒産して印税も貰えずじまいで俺涙目(笑)。

Powered by Movable Type 5.02

スポンサード リンク

はてなブックマーク



あわせて読みたい

t-abeの今読んでる本

t-abeの最近読んだ本

t-abeの今やってるゲーム

t-abeの最近やったゲーム