• ベストアンサー

likeとjoinで詰まってます。助けてください。

ASP+SQLServerを使用することになりました。(どちらも不得意です) 簡単なことかもしれませんがよく分からず数日悩んだ末、混乱してきたので質問させて頂きます。 助言をお願いします。 tableAにはa,b,c,d,eの5つのカラムがあります。 1) hogeと言う文字列が含まれたデータをc,d,eの三つのカラムの中から抽出。 2) 更に、その抽出結果が含まれたデータをtableBのカラムfから抽出。 3) 最終的にtableA.a, tableA.b, tableA.c, tableB.fと言う一覧を出したい。 のですが思ったように行きません。 1)の3つ目のカラムをtableB.fとinner join出来たら良いのに。と思いますが 1)が含まれる文字列になるので上手く行きません。 分かり難い表現で申し訳ありません。助けてください。 宜しくお願いします。

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

  • ベストアンサー
  • sakko99
  • ベストアンサー率63% (19/30)
回答No.4

遅くなりました。これでどうでしょう? select 大分類, 中分類, 小分類, 品名 from ( SELECT tableA.大分類, tableA.中分類, tableA.小分類, tableA.和名 as key1 FROM tableA WHERE ((tableA.和名) Like '%hoge%') UNION SELECT tableA.大分類, tableA.中分類, tableA.小分類, tableA.カナ as key1 FROM tableA WHERE ((tableA.カナ) Like '%hoge%') UNION SELECT tableA.大分類, tableA.中分類, tableA.小分類, tableA.英名 as key1 FROM tableA WHERE ((tableA.英名) Like '%hoge%') ) Q_A, tableB Q_B where Q_B.品名 like '%'+Q_A.key1+'%'

KENT-MILD9
質問者

お礼

ありがとうございました。 旅行に行っていた為、お礼が遅くなり申し訳ありませんでした。 '%'+Q_A.key1+'%' +で囲むんですね。変数を入れるしか無いのかと悩んでいたのでスッキリしました。

その他の回答 (4)

  • rename
  • ベストアンサー率33% (2/6)
回答No.5

返事が遅れました。 文字列「イチゴ」が、 tableAの和名、カナ名、英名のいずれかに含まれていて、 その抽出した和名 or カナ名 or 英名が、 tableBの品名に含まれている という検索がしたいのであれば、 回答者:sakko99 がANo.4で書いてくれたSQLで正解だと思います。 ただ、ANo.3の補足のところで、 質問者:KENT-MILD9さんが書いてくれたデータ例に気になる点があります。 【TableBの情報】 > TableBのカラムfには例えば > [苺飴,イチゴキャンディー,strawberry candy] > [胡麻飴,ゴマキャンディー] > [水飴] > [orange candy] 【TableAの情報】 > 大分類|中分類|小分類|和名 |カナ名         |英名 > ---------------------------------------------------------------------- > お菓子|その他|飴  |苺飴 |ストロベリーキャンディー|strawberry candy > お菓子|その他|飴  |胡麻飴|ゴマキャンディー    |sesame candy このデータだと、 SQLを実行すると検索結果は0件になります。 TableAのカナ名の「ストロベリーキャンディー」は、 「イチゴキャンディー」の間違いでしょうか? もし、このデータを正として質問のような検索結果が得たいのであれば、 SQLは全く違うものになります。 KENT-MILD9さんの質問意図をとらえ違えているといけないので 補足をよろしくお願いします。

KENT-MILD9
質問者

お礼

申し訳ありません。イチゴキャンディーの誤りです。 親身にご回答頂き感謝致します。 一人で悩んでいても解決しなかったので心強かったです。 この度はありがとうございました。

  • sakko99
  • ベストアンサー率63% (19/30)
回答No.3

TableAの和名に「品目A」「品目B」、TableBのカラムfに「aa品目A11」「aa品目A12」「bb品目B11」「bb品目B12」が 入っている場合があるということでしょうか。 この場合、「品目」で検索して、欲しい結果は以下ですか? TableAの和名 TableBのカラムf 品目A     aa品目A11 品目A     aa品目A12 品目B     aa品目B11 品目B     aa品目B12 和名、カナ名、英名の扱いは判りましたが、TableBのカラムfの情報をもう少し具体的にお願いします。

KENT-MILD9
質問者

補足

TableBのカラムfには例えば [苺飴,イチゴキャンディー,strawberry candy] [胡麻飴,ゴマキャンディー] [水飴] [orange candy] と言うように和名、カナ名、英名が混在していて、tableAは 大分類|中分類|小分類|和名 |カナ名         |英名 ---------------------------------------------------------------------- お菓子|その他|飴  |苺飴 |ストロベリーキャンディー|strawberry candy お菓子|その他|飴  |胡麻飴|ゴマキャンディー    |sesame candy と言う感じのデータが入っています。 イチゴで検索した時に以下のように表示されれば良いと思っています。 tableA.大分類|tableA.中分類 |tableA.小分類 |tableB.品名 ---------------------------------------------------------------------- お菓子 |焼き菓子 |クッキー   |イチゴクッキー お菓子 |氷菓子  |アイスクリーム|ストロベリーアイス お菓子 |その他  |飴      |苺飴 見難くて申し訳有りません。 これでイメージが伝わったら幸いです。

  • rename
  • ベストアンサー率33% (2/6)
回答No.2

質問内容に不明な点があるので、詳しく追記をおねがいします。 > 1) hogeと言う文字列が含まれたデータをc,d,eの三つのカラムの中から抽出。 > 2) 更に、その抽出結果が含まれたデータをtableBのカラムfから抽出。  →tableAとtableBを結合する条件を詳しく教えてください。   上記の表現ではわかりません。 > 1)が含まれる文字列になるので上手く行きません。  →言っている意味がわかりません。   具体的に、実行したSQLを載せてください。 よろしくお願いします。

KENT-MILD9
質問者

補足

このような質問にご回答ありがとうございます。情報が足りず失礼致しました。 tebleBのカラムfは品名です。現在このカラムのデータは和名、カナ名、英名が混在しています。 そして、その品名を補完する為のデータがtableAに格納されています。(大分類、中分類、小分類、和名、カナ名、英名) 今回は検索したい文字列が和名、カナ、英名のいずれかなのでtableAに問い合わせ、そのデータが含まれるtebleBのカラムfのデータを紐つけて表示させたいと思っています。 こんなイメージです。 tableA.大分類, tableA.中分類, tableA.小分類, tableB.品名 以下で和名、カナ、英名カラムを和結合(大分類、中分類、小分類カラムを表示) SELECT tableA.大分類, tableA.中分類, tableA.小分類, tableA.和名 FROM tableA WHERE ((tableA.和名) Like '%hoge%') UNION SELECT tableA.大分類, tableA.中分類, tableA.小分類, tableA.カナ FROM tableA WHERE ((tableA.カナ) Like '%hoge%') UNION SELECT tableA.大分類, tableA.中分類, tableA.小分類, tableA.英名 FROM tableA WHERE ((tableA.英名) Like '%hoge%') 全てSQL文でやってしまいたかったのですが良く分からず、この和結合したデータを配列に格納してtableB.品名の問い合わせをlikeで行いinner joinしたらどうかと考えました。 tebleBを設計し直したら良いのでしょうが事情があり今は弄れません。 宜しくお願いいたします。

  • sakko99
  • ベストアンサー率63% (19/30)
回答No.1

tableAとtableBをどうjoinしたいのか判りません。 tableAの抽出後でtableA.C=tableB.f? >1)が含まれる文字列になるので上手く行きません。 ↑の意味が判りません。 もう少し具体的にお願いします。 それからこの内容であればASPよりSQLServerのカテゴリの方が 良いと思います。

KENT-MILD9
質問者

補足

このような質問にご対応下さり、ありがとうございます。 > tableAとtableBをどうjoinしたいのか判りません。 > tableA.C=tableB.f >>1)が含まれる文字列になるので上手く行きません。 >↑の意味が判りません。 上の方の補足投稿でまとめさせて頂きました。 > それからこの内容であればASPよりSQLServerのカテゴリの方が > 良いと思います。 ご指摘ありがとうございます。質問する際、迷ったのですがSQL文で全てまかなえないのではないかと思ったので、こちらで質問させて頂きました。

関連するQ&A