プロが教える店舗&オフィスのセキュリティ対策術

例えば下A表とB表があるとします。

A表                   表B

No 住所                 市区  ランク
1 神奈川県川崎市宮前1−1−1       川崎市  A
2 神奈川県横浜市都筑区2−2−2      横浜市  B
3 東京都江東区門前仲町3−3−3      江東区  C

結果の表
No 住所           ランク
1 神奈川県川崎市宮前1−1−1   A
2 神奈川県横浜市都筑区2−2−2  B
3 東京都江東区門前仲町3−3−3  C

よろしくお願いします。

A 回答 (3件)

たとえばこんな感じ


文字列結合の仕方はSQLによって微妙にことなるので、
ご利用のSQLの文字列関数のマニュアルを参照ください

create table table_a(No int,住所 VARCHAR(100));
insert into table_a values(1,'神奈川県川崎市宮前1-1-1'),(2,'神奈川県横浜市都筑区2-2-2'),(3,'東京都江東区門前仲町3-3-3');
create table table_b(市区 VARCHAR(100),ランク VARCHAR(10));
insert into table_b values('川崎市','A'),('横浜市','B'),('江東区','C');

SELECT No,住所,ランク
FROM table_a as a
LEFT JOIN table_b as b ON a.住所 LIKE CONCAT('%',市区,'%');

ただし、テーブルBの市区のカラムは実用に耐えないと思います
同名の市区町村は多数あるので、検索が競合します
https://ja.wikipedia.org/wiki/%E5%90%8C%E4%B8%80 …
    • good
    • 1

No.1です。


非常に初歩的なことです。勉強しましょう。
教科書などを見る際のキーワードは「ワイルドカード」です。

これで調べることが出来なかったらもう少し初歩的な問題からやった方がよいです。
    • good
    • 0

B表を基準に処理すればよいだけではないでしょうか?


「A表の住所にB表の項目「市区」の値を含むもの(←ここが曖昧検索ですね)を見つける」です。
書かれている3行についてはそれで処理できます。

それでは処理できないものがB表の市区に来ることがあるのであれば、A表の住所を都道府県、市町村、区町、番地に静的に分けてしまうか、あるいは動的に分けながら処理することになるかと思います。

参考まで。
    • good
    • 0
この回答へのお礼

ありがとうございます。
SQL文はどのように記述すればよいのでしょうか?
初心者で恐縮ですがご教示いただければありがたく。

お礼日時:2016/02/16 20:22

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