HRR Co., Ltd.

技術的な記録を残していくことを目的としています。1次情報を大事にしています。

結合条件にLIKEを使う方法

はじめに

あいまいな条件で結合させたい場面がありましたので、調べた結果のメモです。
結果として採用しませんでした。
(予期しないものと結合してしまいがちで使い道は実は限られそう)

例として住所の利用をあげます。

具体例

申し訳ないことに実際に叩いていないので、イメージだけ掴んでいただければ。

テーブル構成とほしいもの

user テーブル

id name address
1 愛川欽也 北海道札幌市中央区
2 哀川翔 青森県青森市
3 相川勇気 岩手県盛岡市

prefecture テーブル

id name
1 北海道
2 青森県
3 岩手県

ほしいもの:

id name pref_id address
1 愛川欽也 1 北海道札幌市中央区
2 哀川翔 2 青森県青森市
3 相川勇気 3 岩手県盛岡市

SQL

SELECT
    user.id, user.name, pref.id AS pref_id, user.address
FROM 
    user AS user
LEFT JOIN
    prefecture AS pref
ON
    user.address LIKE CONCAT(pref.name, '%')
;

上記は前方一致の例。
LIKEをつけるときに使う%を、文字列連結の関数であるCONCAT()を使って組み立てています。

懸念点

都道府県名での結合くらいなら問題なくできると思いますが…
例えば市区郡レベルでやろうとすると、途端に意図しない結合になると思います。
(頭に東西南北がつく市とつかない市がある場合など)

お気をつけください。

最後に

今回の記事の本質とずれますが…住所の扱いってやっかいですよね…
せめて公共機関が公開しているデータについては、扱いやすいものにしていただきたい…。

以上でした。