重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

SELECT文で質問があります。
商品情報を格納したテーブルを作成し、「商品名を検索するとその商品番号を取得する」という単純なSELECTですがうまくいきません。

■tb_items → 商品情報を格納しています。
--------------------------------------------
商品番号 サイズ 重さ
001   50   120
002   30   200
--------------------------------------------

■tb_details → 店舗毎の情報を格納しています。
--------------------------------------------
商品番号 店舗番号 商品名       価格
001   shop_A  シャープデジカメ  50000
001   shop_B  シャープcamera   56000
002   shop_A  パナソニックスマホ 85000
002   shop_B  Panasonicスマホ   79000
--------------------------------------------

ここで、「商品名を検索するとその商品番号を取得できる」としたいのですが、例えば「シャープ」で検索すると商品番号001を取得できますが、「sharp」で検索すると当然ですが商品番号001は取得できません。
そこでタグのようなものを登録するテーブルをさらに作成しました。

■tb_tags
--------------------------------------------
タグ     商品番号
sharp     001
カメラ     001
スマートフォン 002
携帯      002
--------------------------------------------

試しに「sharp カメラ」を検索してみました。SELECT文は以下のようにしました。

--------------------------------------------
SELECT
 tbI.`商品番号`
FROM
 tb_items AS tbI
LEFT JOIN
 tb_details AS tbD ON tbI.`商品番号` = tbD.`商品番号`
LEFT JOIN
 tb_keywords AS tbK ON tbI.`商品番号` = tbK.`商品番号`
WHERE
 (
  ((tbK.`タグ` = 'sharp') OR (tbK.`タグ` = 'カメラ')) OR
  (
   (tbD.`商品名` LIKE '%sharp%') AND (tbD.`商品名` LIKE '%カメラ%')
  )
 )
--------------------------------------------

取得した結果は、

001
001

というように同じ商品番号を重複して2つ取得してしまいます。
検索を「シャープ camera」にしても重複して2つ取得してしまいます。

やりたいことは、「検索文字列(空白区切りあり)で商品名とタグを検索してヒットした商品番号を重複なしに取得したい」です。
どのようなSELECT文にすれば良いのでしょうか?

お手数ですがアドバイスを頂けたらと思います。
どうぞよろしくお願い致します。

A 回答 (1件)

詳しく検証していませんが、単にダブりを表示しないだけなら



SELECT DISTINCT カラム FROM テーブル
で十分かと
    • good
    • 0
この回答へのお礼

ありがとうございます!
実はDISTINCTは試していて、これを使うと取得数が0になってしまっていました。
しかしどうやら私のDISTINCTの使い方が間違っていて今DISTINCTを使って書き直したら重複する情報がうまく一つにまとまってくれました。

↓うまくできた書き方
SELECT
 DISTINCT(tbI.`商品番号`) AS itemNo
FROM
 …

↓間違った書き方
SELECT
 DISTINCT(tbI.`商品番号` AS itemNo)
FROM
 …

お礼日時:2014/02/13 12:37

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

関連するカテゴリからQ&Aを探す