はじめに
あいまいな条件で結合させたい場面がありましたので、調べた結果のメモです。
結果として採用しませんでした。
(予期しないものと結合してしまいがちで使い道は実は限られそう)
例として住所の利用をあげます。
具体例
申し訳ないことに実際に叩いていないので、イメージだけ掴んでいただければ。
テーブル構成とほしいもの
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()
を使って組み立てています。
懸念点
都道府県名での結合くらいなら問題なくできると思いますが…
例えば市区郡レベルでやろうとすると、途端に意図しない結合になると思います。
(頭に東西南北がつく市とつかない市がある場合など)
お気をつけください。
最後に
今回の記事の本質とずれますが…住所の扱いってやっかいですよね…
せめて公共機関が公開しているデータについては、扱いやすいものにしていただきたい…。
以上でした。