質問: MySQLで、文字列カラムから結合する文字列を取り出して、 別テーブルにあるIDと照合して、場所名がでるようにしたいです。 テーブルA 1000件ほど こちらをfromにしたいです。 URL(text) ***=1 ***=2 ***=+++ テーブルB 50件ほど テーブルAのURLの=以降の数字とIDが同じ区分で分かれます。 テーブルAの=以降は数字でないものを含みます。そちらはNULLで表示したいです。 ID(int) 場所名 1 **公園 2 **港 3 **駅 結合後テーブル 1000件ほど URL 場所名 ***=1 **公園 ***=2 **港 ***=+++ NULL ・ ・ ・ ・ ・ ・ URLからsubstring_indexでURLの末尾1、2、+++の取り出し、 left joinの外部結合を用いる。ことは調べたのですが、 そこから先で、サブクエリを使って外部結合、 select句にsubstring_indexでURL_IDとして作成後、外部結合 など行っていますが、そこから先に進めず躓いています。 そもそもサブクエリではなく、 Aテーブルに新たなカラムを加えて外部結合しなければならないのでしょうか。 なにとぞよろしくお願いいたします。
回答: おそらくこんな感じです * サンプルデータ ``` create table TA (URL text); insert into TA values('***=1'),('***=2'),('***=+++'); create table TB (ID int, 場所名 varchar(30)); insert into TB values(1,'**公園'),(2,'**港'),(3,'**駅'); ``` * 検索 ``` select * from TA left join TB on TA.URL LIKE concat('%=',TB.ID); ``` ただしtext型に後方一致は相当な負担なのでデータが多くなってくると パフォーマンス的にきびしいかも