質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

1159閲覧

他テーブルを前方一致検索した結果にてデータ更新するSQLの書き方

PenelopeG

総合スコア31

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2017/07/07 07:30

SQLについてご教授願います。

clinicテーブル

cityテーブル

上記のような2つのテーブルがあります。
clinicには医院情報が2000件程入っています。
cityには全国の市区町村データが1800件程入っています。

clinicのaddressで、cityのcitynameを前方一致検索して得られたcityのcityidを、
clinicのcityidにセットしたいです。

なお、clinicのcityidには古いデータが入っているため、UPDATEになると考えています。

どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

まさかのワイルドカードとか考えたくなかったので、INSTR使ってみました。

SQL

1UPDATE 2 clinic a, 3 city b 4SET 5 a.cityid = b.cityid 6WHERE 7 INSTR(a.address, b.cityname) = 1 8;

投稿2017/07/07 09:43

編集2017/07/08 06:33
shoko1

総合スコア372

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PenelopeG

2017/07/07 10:07

ありがとうございます。上手くいきました!!! 前方一致だと思い込んでしまうあたり、まだまだ私は未熟です(汗 勉強になりました。 --------------- WHERE句だけ以下のとおり修正しました。(後で見たときのため一応・・・) INSTR(a.address, b.cityname) = 1
shoko1

2017/07/08 06:34

あらあら、未実行だとやらかしますね、すみません。回答のほうも直しておきました。
PenelopeG

2017/07/15 08:35

ありがとうございますm(_ _)m
guest

0

MySQL 限定だと思いますが。

SQL

1UPDATE 2 clinic t1, 3 city t2 4SET 5 t1.cityid = t2.cityid 6WHERE 7 t1.address like t2.cityname||'%'; 8LIMIT 1

ただ like で複数引っかかる可能性があるので、どの順でマッチするかは分かりません。

だいぶズブズブな感じがするので、よく検討されてからの方が良さそうです。

投稿2017/07/07 08:07

mattn

総合スコア5030

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mattn

2017/07/07 08:07

あとマスタテーブルなのでバックアップしてから実行した方が良いです。
PenelopeG

2017/07/07 09:28

さっそくのご回答ありがとうございます。 試してみましたが、 #1221 - Incorrect usage of UPDATE and LIMIT と、エラーが出てしまいました。 複数テーブルを扱っているからでしょうか? そこで、LIMIT 1を除いて実行してみたものの、1件も変更されませんでした。。。 恐縮です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問