プロが教えるわが家の防犯対策術!

・MySQLで一致条件に正規表現を使用することは出来ますか?
・もし出来るとすればどのようにすれば良いでしょうか?

■やりたいこと
・aテーブルのurlカラム内容が「/color/★★」だったら「/color/」以下の★★を抽出して、bテーブルのidと一致したレコードを抽出したい
・aテーブルの★★と、bテーブルのidカラムが一致しているレコードが欲しい
・aテーブルのurlカラムには「/color/58」「/color/26」「/hoge/■■」などが入っています

SELECT *
    FROM a
     LEFT JOIN a.url = b.id
    REGEXP '^(/color)'?
    where a.★★ = b.id

A 回答 (2件)

ショートアンサー:正規表現は使えるけど、その場合インデックスを使った実行計画は選択されない、です。



事前にURLから属性を抽出して、別のカラムに持たせておくというのが、スタートラインじゃないかと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございましたー

お礼日時:2014/03/06 18:00

select a.*


from a left join b
on substring(a.url,8)=b.id

where a.url REGEXP '^/color/.*'
where substring(a.url,1,7)='/color/'

抽出条件はurlが'/color/'で始まるもの
where句はどちらも同じ意味になりますので、
どちらかを使って下さい。

結合条件はa.urlの8文字目以降とb.idが
一致するものです。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
おかげでうまくいきました!

・where句の書き方にも色々あるんですね
・大変参考になりましたー

お礼日時:2014/03/06 17:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!