nishimeno
@nishimeno

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

2つのテーブルの一部キーワードのマッチング

解決したいこと

2つのテーブルがあります。
片方のテーブルのリストをもとに、
他方のテーブルを参照して、
キーワードにマッチしたものを抽出する方法をお教えください。

例)
T_くだものリスト
 りんご
 みかん
 いちご

T_商品リスト
 すっぱいりんご
 あまいりんご
 すっぱいいちご
 新鮮なサバ
 高級なマグロ

希望するマッチング抽出結果
 (T_商品リストから抽出)
 すっぱいりんご
 あまいりんご
 すっぱいいちご

ここでは、T_くだものリストの ”りんご””いちご”がヒット

発生している問題・エラー

エラーはありません

accessのクエリだと、抽出条件を個々にワイルドカードを指定するしか方法がわかりませんでした。
リスト同士のマッチングで抽出したいと考えております。

SQLも調べてみましたが、もともと記述したことがないため、まったくわかりませんでした。
*UNION くらいしか記述したことがありません。

0

4Answer

2つのテーブルを比較して、一部キーワードについて
マッチしたものを抽出する方法をお教えください。

比較して が何を指しているのか
分かりませんが、仮に、
「くだものリスト」テーブルと
「商品リスト」テーブルの複数テーブルから
りんごいちごが含まれる、
というような検索を行った場合、
「くだものリスト」テーブルの
青森りんご山形りんご福岡いちご、及び
「商品リスト」テーブルの
すっぱいりんごあまいりんごすっぱいいちご
抽出されると思いますが、
期待する動作をもう少し具体的に言語化することは可能でしょうか。

そもそもの話で申し訳ないのですが、
現状、テーブルの作り自体が良くない
(期待している動作ができるようにできていない)
ように見受けられますが、そこはいかがでしょうか。

0Like

Comments

  1. @nishimeno

    Questioner

    説明が拙く失礼しました

    改めて考えまして、マッチする条件に無理があると考えました。
    質問を変更いたします。

  2. 各テーブルにデータを一意に特定する為の
    「ID」という重複しない項目が存在し、
    それによって各テーブルが紐付く(リレーションがある)と
    仮定して回答します。
    (本来であれば、商品分類テーブルのように
    纏めてしまう設計の方が良いかもしれませんが逸れるので置いときます)

    ■くだものリスト

    ID NAME
    1 りんご
    2 みかん
    3 いちご

    ■さかなリスト(仮定です)

    ID NAME
    1 サバ
    2 マグロ

    ■商品リスト

    ID NAME FISH_ID FRUIT_ID
    1 すっぱいりんご 1
    2 あまいりんご 1
    3 すっぱいいちご 3
    4 新鮮なサバ 1
    5 高級なマグロ 2

    上記の時、

    イメージ.sql
    SELECT DISTINCT goods.NAME AS 商品名, fruit.NAME AS くだもの名
    FROM 商品リスト goods
    JOIN くだものリスト fruit ON goods.FRUIT_ID = fruit.ID
    WHERE goods.NAME LIKE '%りんご%' OR goods.NAME LIKE '%いちご%';
    

    みたいな感じにするのじゃダメでしょうか?
    出先なので未検証且つ走り書きで申し訳ないですが、
    だいたいのイメージはつきますでしょうか。

T_くだものリスト に 青森りんご があり
T_商品リスト に すっぱいりんご がある状態だと
「りんご」の部分が一致するので すっぱいりんご が抽出されている
という認識で良いでしょうか。

単純に T_くだものリスト・T_商品リスト にカテゴリ列を追加し、その列で結合するのではダメなのでしょうか?

T_くだものリスト

名称 カテゴリ
青森りんご りんご
愛媛みかん みかん

T_商品リスト

名称 カテゴリ
すっぱいりんご りんご
新鮮なサバ さば

↑の例だと カテゴリ:りんご が一致するので すっぱいりんご は抽出される。

どこまでをキーワード判定するのかを何かしら情報として持たないと難しいかと思います。

0Like

Comments

  1. @nishimeno

    Questioner

    おっしゃられるように、判定の範囲が整理できておりませんでした。
    上述の通り、質問を変更いたしました。

  2. 変更された質問を確認しました。
    そのうえで私の回答としては「商品リストテーブルには前述の通り何らかの列追加をしたほうが良いのではないでしょうか?」となります。

    部分一致だけなら access は存じませんが SQL ならば like と exists を利用すれば可能だとは思います。
    ただし、それでも現状のテーブルだと T_くだものリスト に「グレープ」があった場合に T_商品リストの「グレープフルーツジュース」があった場合にヒットしてしまうかと思います。

    商品リストにくだもの列など追加してその列で判定しないと望む結果は得られないかと思います。

DB サーバーは何ですか? SQL Server? SQLite? MySQL? PosrgreSQL? Access? その他? SQL の文法は DB サーバーが何かによって違うのですよ。

0Like

Comments

  1. @nishimeno

    Questioner

    環境の提示ができておらず失礼しました。
    MicrosoftOffice2016Pro の Access を使っております。

  2. MicrosoftOffice2016Pro の Access を使っております。

    それを質問文を編集して追加情報として追記願います。追記していただけ次第この回答は削除しますので。

like in(サブクエリ) の併用ができないのでサブクエリと正規表現の組み合わせで、検索しているのが現状です。
CONCAT関数で正規表現を加工する羽目になります。

尚、サンプルはmariaDBです。

0Like

Your answer might help someone💌