質問: お世話になります。 現在、mySQLを独学で学びながら使用しています。 簡単なSQL文なら組めるのですが、複雑なSQL文を設計するとなると未だ能力が足りません。 独力での解決が困難な問題に直面したため、皆様のお知恵をお借りしたく思います。 あるデータベース「perdonal_db」にテーブル「table1」,テーブル「table2」があります。 table1にはid(unique)、nameの2つのカラムがあります。 table2にはid(unique)、gender、mailの3つのカラムがあります。 今、table1にカラム「mail」を追加したうえで、table2について任意のidのgenderが"man"である場合、table1の同じidの「mail」データを、table2の「mail」データにしたいと思います。 たとえばtable1が id name 1 dog 2 cat 3 bird 4 fish : table2が id gender mail 1 man wan@mail.com 2 woman nyan@mail.com 3 woman chun@mail.com 4 man sashimi@mail.com : のとき、sql文実行後にtable1は id name mail 1 dog wan@mail.com 2 cat (null) 3 bird (null) 4 fish sashimi@mail.com : となるようにしたいです。 件数が少なければphpを使用して処理するのですが、今回はtable1、table2に相当するデータが100万件以上あるため、できることならmysqlの機能......つまりSQL文だけで更新処理を行いたいと思います。 このような別テーブルのデータを基にして、一度にアップデート行うSQL文がありましたら、教えていただきたく思います。 よろしくお願いします。
回答: まずtable1にmailカラムを追加します。 ``` ALTER TABLE table1 ADD ( mail varchar(255) ) ; ``` varcharはtable2と同じ設定にすると良いと思います。 続いて更新です。 同じidかつtable2のgenderがmanだった場合、table2にtable1のmailを追加します。 ``` UPDATE table1,table2 SET table1.mail = table2.mail WHERE table1.id = table2.id AND table2.gender = 'man'; ``` ここで気軽にMySQL文試せるのでオススメです。 https://paiza.io/projects/new 参考 http://piyopiyocs.blog115.fc2.com/blog-entry-661.html