重要なお知らせ

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

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

現在、ORACLE8.1.7で開発しております。

以下のようなテーブルが3つあります。

【マスタ】     【変換マスタ】   
 型名       型名  変換型名   
---------    --------------------  
 AAA       AAA   a     
 BBB       BBB   b_     
 CCC       CCC   c_d             

【商品マスタ】
 番号 商品名
-----------
  1 a
  2 abc
  3 b
  4 bc
  5 bcd
  6 c
  7 cc
  8 ccd
  9 cccd

 1)マスタから変換マスタを型名をキーにして検索。
 2)1)で取得した変換型名をキーにして、商品マスタを検索。
   このとき、完全一致ではなく、あいまい検索で行う。

   ※ここで抽出されるのは、これです↓
    1 a
    2 abc
    4 bc
    5 bcd
    8 ccd

にたような質問がありましたので、これを参考にして、先頭が一致するものはできました。
しかし、ワイルドカード『_』が入った場合でのSQL文がどうしても書けません。
1行のSQL文で書きたいのですが、どなたがご存じの方がいらっしゃったら教えてください。

≪先頭が一致するSQL文≫
SELECT 商品マスタ.番号,商品マスタ.商品名 FROM マスタ,変換マスタ,商品マスタ
WHERE マスタ.型名 = 変換マスタ.型名
AND 変換マスタ.変換型名 = SUBSTR(商品マスタ.商品名,1,LENGTH(変換マスタ.変換型名))
 
≪参考にした質問≫
http://oshiete1.goo.ne.jp/kotaeru.php3?q=375213

A 回答 (1件)

こんにちわ。



ちょっと確認してみました。
【マスタ表】
SQL> select * from mst;
ITEM_TYPE
----------
AAA
BBB
CCC

【変換マスタ表】
SQL> select * from conv_mst;
ITEM_TYPE CONV_NAME
---------- ----------
AAA    a
BBB    b_
CCC    c_d

【商品マスタ表】
SQL> select * from item_mst;
  ITEM_NO ITEM_NAME
---------- ----------
     1 a
     2 abc
     3 b
     4 bc
     5 bcd
     6 c
     7 cc
     8 ccd
     9 cccd

【確認結果】
SQL> select item_no, item_name from item_mst, conv_mst, mst
    where item_name like conv_name || '%' and
     conv_mst.item_type = mst.item_type;
  ITEM_NO ITEM_NAME
---------- ----------
     1 a
     2 abc
     4 bc
     5 bcd
     8 ccd

環境は、Oracle8i R8.1.7.4.1 を使いました。
如何でしょうか?
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます!
以前、『Like文はだめだった』という覚えがあったので、
Like文を使わない方向で考えていました。
たぶん、当時のデータがまずかったんだと思います(苦笑

同じやり方でできました!
ありがとうございましたm(_ _)m

お礼日時:2003/01/29 09:25

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

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