別テーブルのデータを部分一致で選択する方法とは?

このQ&Aのポイント
  • 別テーブルにあるデータを部分一致で選択するためには、SQLのLIKE句を使用します。具体的には、テーブルAとテーブルBを結合し、テーブルAの住所カラムとテーブルBの市区町村名カラムを部分一致で比較します。
  • テーブルAに住所、テーブルBに市区町村名と市区町村コードがあります。テーブルAの住所カラムの値がテーブルBの市区町村名カラムの値に部分一致する場合、対応する市区町村コードを取得します。
  • 具体的な手順は以下の通りです。
回答を見る
  • ベストアンサー

別テーブルにあるデータを部分一致で選択するためにはどうしたらよいでしょ

別テーブルにあるデータを部分一致で選択するためにはどうしたらよいでしょう。 申し訳ありません基本的なSQLを教えてください。 テーブルAに住所、テーブルBに市区町村名と市区町村コードがあり、テーブルAに当該市区町村コードを付けたしたいのですが、どうやってテーブルAとBをマッチさせればよいのでしょうか 具体的に言えば テーブルA内の住所カラムが以下のようなものを含んだデータだとします。 神奈川県横浜市中区XX-XX 東京都港区赤坂XXX ・ ・ ・ テーブルBには市区町村名カラムと市区町村コードカラムがあります。 中央区,0011 港区,0012 ・ ・ 横浜市中区,0033 横浜市南区,0034 ・ ・ (一応注釈ですがCSVのイメージだと思ってください) この2つのテーブルから合致したものに対し 神奈川県横浜市中区XX-XX,0033 東京都港区赤坂XXX,0012 という形で抽出したいのですがどのようにしたら良いのでしょうか (東京の”中央区”など重複する可能性のあるものはデータ側で対応しますので重複しないと考えて結構です) よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

まずSQL的な高速な処理は無理です。遅くてもよいならという前提で、 中区を汎用にするため%を両端につけます CONCAT('%',市区町村名カラム、'%') これをもとにINNER JOIN すればよいでしょう SELECT 住所カラム,市区町村コードカラム FROM テーブルA INNER JOIN テーブルB ON 住所カラム LIKE CONCAT('%',市区町村名カラム、'%') ただ「重複しないと考えて」といいつつもかなり無理があるロジックです。 たとえば広島市で検索をかけると東広島市がヒットしたりします。 正規表現のつかえるSQLであれば、いろいろ調整できるかもしれませんね

miyamasa45
質問者

お礼

丁寧なご回答ありがとうございました。

その他の回答 (1)

回答No.1

こんにちは。 データベースの種類をお願いします・・・。

miyamasa45
質問者

補足

こんにちは。 SQL Serverですが、簡単なポーティングはするつもりなのでRDBMSはどれを想定していただいても結構です。 よろしくお願いいたします。

関連するQ&A

  • 【Access】部分一致で不一致データを抽出したい

    クエリで2つのテーブルから、不一致データを抽出したいのですが、 完全一致だけでなく部分一致のデータも一致データとして取り除きたいです。 [テーブルA]フィールド1 000-0001 000-0001A 000-0002 000-0003 000-0004 [テーブルB]フィールド2 000-0001 000-0002 というようなデータで、結果は [結果] 000-0003 000-0004 というふうにしたいです。 (000-0001だけでなく000-0001Aというデータも取り除きたいのです。) Access初心者で、クエリウィザードを使用した重複データ抽出、不一致データ抽出、 およびクエリデザインを使用した重複データ抽出が何とかできる程度です。 初心者でも分かるようにご回答いただければ大変助かります。 よろしくお願いいたします。

  • 住所録を3カラムに分割方法

    下記左列のような住所録があり、それを右列のように3カラムに分割する方法を教えてください。Excelに限らず、テキストエディタなどでも(タブ切など)可能なら手段は問いません。 港区青山1-1-1 → 港区 青山 1-1-1 横浜市青葉区xxx町2-2-2 → 横浜市青葉区 xxx町 2-2-2 東大阪市長堂3-3-3 → 東大阪市 長堂 3-3-3 xx市xx群xx町4-4-4 → xx市 xx群xx町 4-4-4 都道府県は不要(ありません) 市+区なら、区で切ります 番地の数字は半角、全角 混在します(漢数字は目視で対応します) 一発置換でなくても、合わせ技でも結構です。 宜しくお願い致します。

  • 複数のテーブルからデータを取得したい

    1つのテーブルから重複したデータを取り除いて表示するときに使う 【select distinct カラム名 from テーブル名;】 がありますよね。 それと同じようなことを複数のテーブルをまたいで行いたいのですがうまくいきません。 ちなみに両方のテーブルのカラム名は同じです。 【select distinct カラム名 from テーブル1 union select distinct カラム名 from テーブル2;】 としても重複を取り除いた後にテーブルを結合してるので結果的に両テーブルの重複した値を取り除くことができず。 そこで 【select distinct T1.カラム名, T2.カラム名 from テーブル1 T1. テーブル2 T2;】 としてみたのですが、クエリを実行中のまま反応がないので悩んでます。 ちなみに2つのテーブルのデータはそれぞれ2万件ほどです。 こういう時どういうsql文を組むのが正しいのでしょうか?

    • ベストアンサー
    • MySQL
  • Accessフォーム 大分類→小分類を選択したい

    Access初心者です。 ほかの類似の質問を検索して試してみたのですが、 どうしても同じようにできません。 もう1週間も同じところでつまづいています。 どなたか、初心者にもわかるように教えていただければ幸いです。 以下のようなテーブルがあるとします。 [都道府県] [市区町村] 東京都  新宿区 東京都  港区 東京都  渋谷区 神奈川県  横浜市 神奈川県  川崎市 神奈川県  藤沢市 埼玉県  さいたま市 埼玉県  熊谷市 埼玉県  三郷市 フォーム上で、 [都道府県]のコンボボックスで東京都を選んだ場合、 [市区町村]のコンボボックスには「東京都」の市区町村名が 選択できるようにしたいのですが、 一番最初のところで行き詰っています。 コンボボックスウィザードにしたがって [都道府県]のコンボボックスを作成すると、 [東京都] [東京都] [東京都] [神奈川県] [神奈川県] [神奈川県] … というリストが出てきてしまいます。 過去の質問を検索し、プロパティの値集合ソースで、 SELECT[都道府県]…FROM[テーブル名]の後に、 GROUP BY[都道府県]と書き加えたのですが、 こうするとリストが出てこなくなります。 いったいどうしたらよいのでしょうか。 ほとほと困っています。 どうかご教示ください。お願いいたします。

  • <ACCESS> 住所から市区町村を抜き出したい

    Access初心者です。 住所一覧が書いてあるテーブルのデータから 市区町村を抜き出したく苦戦しております。 住所のデータは 都道府県から始まっているものから 市区町村から始まっているもの また、空白もあります。 市区町村名の一覧テーブル(T_市区町村)は作りました。 サブクエリには 市区町村:(select [市区町村名] from T_市区町村 where [住所] like "%" &[市区町村名] & "%") と入力しました。 そのまま実行すると 特に市区町村が抽出されることもなく そのまま住所が転記されてしまいます。 どのようにしたら良いのでしょうか。 お力を貸していただけたら幸いです。 よろしくお願い致します。

  • MYSQL バイナリーデータに変換して取得

    MYSQLでSELECTして以下のテーブルのCODEカラムからバイナリーデータに変換してデータを取得したいのですが、どうしたら良いでしょうか? SELECT CODE FROM TABLE_NEME WHERE ID='XXX' <テーブルデータ> CODE(varchar型) 011A00046D0ADC4B

    • ベストアンサー
    • MySQL
  • Accsess テーブルを参照して別のテーブルにデータを取得する方法を教えてください

    初めて質問します。 アクセスでデータベースを作成しようと悪戦苦闘中です。 <質問> 元データとなる住所録テーブルAがあります。 テーブルBにテーブルAの情報+αのデータをフォームを使って入力したいのです。 (1)テーブルAにはコードがあり、テーブルBに入力する際に、そのコードを入力するとテーブルAからデータを取得でき、テーブルBにコピーとして取得したいです。 (2)また同じコードが複数ある場合は、別ウィンドウを 開きそこから選択してテーブルBにコピーしたいです。 (1)と(2)では方法が違うと思うのですが、どちらの場合も教えて頂けないでしょうか? DLookup関数を使うのでしょうか・・・? よろしくお願いします。

  • SQlite 2つのテーブル データ一致を抽出

    PHP4.xx と SQLite2 初心者です。 会員向けのメルマガ配信プログラムを構築しています。 配信リストのテーブルと 配信停止リストのテーブルの「メールアドレス」のカラムにあるデータを照らし合わせて一致する情報を抽出したいのですがどうしたら言いかわかりません… 具体的には・・・ ある会員が配信停止を希望し、配信停止フォームから自分のメールアドレスの送信します。 すると配信停止テーブルにメールアドレスが登録される構造になっています。 送信する際は毎回CSVファイルを読み込んで配信先リストを作成して、数百人に送信するのですが、その際に読み込んだ数百件のデータのメールアドレスの部分を配信停止テーブルに登録されているメールアドレスのデータを照らし合わせて、一致した行を読み込まないようにしたいのです。 (そうしないとまたうっかり送ってしまう可能性があるので。) どうぞよろしくお願いします。

  • 【VBA】全角半角入り交じった住所を分割

    Book1のA列に記載されている市区町村番地を、別のファイルであるBook2のA列とB列に、それぞれ市区町村と番地に分けて転記するVBAを教えていただけますでしょうか。 住所は半角全角が入り交じっていますが、どちらかに統一するのではなく、記載されているとおりに転記したいです。 全角だけ、もしくは半角だけを抜き出すマクロは見つけたのですが、どちらであっても分割できるマクロがわかりません。 下記の住所を、、、 Book1 A列 港区赤坂1-2-3 港区赤坂1-2-3 港区赤坂1-2-3 下記のように分割して別ファイルに転記 Book2 A列    B列 港区赤坂  1-2-3 港区赤坂  1-2-3 港区赤坂  1-2-3 お知恵をお貸し下さい。 よろしくお願いいたします。

  • バインドするデータを切替えしたい

    VS2008 C#でASP.NETページを作っています。 1つのFormViewでバインドさせるデータを切替えしたいのですが 可能なのでしょうか? テーブルのカラム数、データ型は同じでカラム名だけが違います。 ながれとしては パラメータでselectするテーブルを切替える SqlDataSource1 = select from a ⇔ SqlDataSource1 = select from b DataBinder.Evalメソッドの第2引数をa.xxx ⇔ b.xxx変更できるのでしょうか? DataBinder.Eval(Container.DataItem, "xxx") 宜しくお願いします。