Oracleでの検索方法

このQ&Aのポイント
  • Oracle8.1.7での開発において、ワイルドカードを含んだデータを検索する方法がわからない。
  • 例えば、データが『ABC12345』の場合には、Noが『3』のデータを検索したい。
  • ご教授いただける方がいらっしゃいましたら、お知恵をお貸しください。
回答を見る
  • ベストアンサー

Oracleでの検索方法

現在、Oracle8.1.7で開発しています。 以下のようなことがやりたいのですが、 よい方法が思いつきません。 あるデータをキーにして、テーブルの中にワイルドカードを 含んだデータを検索したいのです。 ※ワイルドカードを逆引きするようなイメージです。 例)  データが『ABC12345』の場合には、Noが『3』のデータを検索したいのです。    テーブルA  NO NAME   1  AA-1   2  AB_1234_  ←このデータを検索したい。   3  BCEDFG 説明が不十分だと思いますが、 どなかたわかる方がいらっしゃったら教えて下さいm(_ _)m

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

  • ベストアンサー
  • rancer
  • ベストアンサー率66% (6/9)
回答No.1

動的SQLで、こういうSQL文を組めばいいんじゃないですか? SELECT * FROM テーブルA WHERE substr(NAME,1,1) IN ('A', '_')  AND substr(NAME,2,1) IN ('B', '_')  AND substr(NAME,3,1) IN ('C', '_')  AND substr(NAME,4,1) IN ('1', '_')  AND substr(NAME,5,1) IN ('2', '_')  AND substr(NAME,6,1) IN ('3', '_')  AND substr(NAME,7,1) IN ('4', '_')  AND substr(NAME,8,1) IN ('5', '_'); ダメかな? こういうの?

mybigbaby
質問者

お礼

返事が遅くなってしまいました(^。^; 今回は、動的SQLは使用していませんでした。 1回でできる方法はないかと思ったのですが… 別の方法で解決しました。 ありがとうございましたm(_ _)m

その他の回答 (1)

  • jmh
  • ベストアンサー率23% (71/304)
回答No.2

select * from A where 'ABC12345' like NAME > 『3』のデータを検索したいのです。 『3』...?

mybigbaby
質問者

補足

『2』の間違いでした。すみません(^、^;

関連するQ&A

  • Oracleのあいまい検索について

    Oracle(10g)のあいまい検索について。 DB上に「ABC」「DEF」という2つのデータがある状態で、 「ABCDEF」で検索した場合について、 検索結果として、「ABC」と「DEF」の両方を得る方法はありますでしょうか? (現状では対象データがありませんとなります。) LIKEによるあいまい検索や、Oracle textによる全文検索では、 上記の検索結果を得ることができません。 LIKEやOracle textの場合はあくまで部分一致なので、 検索対象の文字列([ABC」「DEF」)より長い(「ABCDEF」)文字列での 検索はヒットしないようです。 ご存じの方いましたら、ご教示頂きたいと思います。 以上

  • Oracle[10g]のSQL文について。(新No.3)

    なんども、恐縮です。 Oracle[10g]のSQL文についての質問です。(新No.3) 実は、JOINが多くてどこに[ROW_NUMBER]を入れれば良いのか解りません。 [A]テーブルに [CODE](KEY) [CODE2] のフィールドがあります。 A-1 B-1 A-2 B-2 A-3 B-3 [A2]テーブルに [CODEB](KEY) [CODE2] のフィールドがあります。 AA-1 B-1 AA-2 B-2 AA-3 B-3 [B]テーブルに [CODE3](KEY) [NAME-B] のフィールドがあります。 B-1 NAME-B-1 B-2 NAME-B-2 [C1]テーブルに [NO](KEY) [LINE](KEY) [CODE] [CODEB]のフィールドがあります。 X 1 A-1 AA-2 X 2 A-3 AA-1 Y 1 A-2 AA-3 [C2]テーブルに [NO](KEY) [LINE](KEY) [LINE2](KEY) [BIKO] のフィールドがあります。 X 1 1 BIKO-1 X 1 2 BIKO-2 結果が [NO/LINE/CODE/CODEB/NM1/NM2/BIKO] X 1 A-1 AA-2 NAME-B-1 NAME-B-2 BIKO-1 X 2 A-3 AA-1 (null) NAME-B-1 (null) と、なる様にしたいのです。 要するに、のBIKOは、[C2.LINE2]の一番最小の物を取得したいのです。 SELECT C1.NO, C1.LINE, C1.CODE, C1.CODEB, B.NAMEB AS NM1, B_1.NAMEB AS NM2, C2.LINE2, C2.BIKO FROM ((((C1 LEFT JOIN A ON C1.CODE = A.CODE) LEFT JOIN B ON A.CODE2 = B.CODE3) LEFT JOIN A2 ON C1.CODEB = A2.CODEB) LEFT JOIN B B_1 ON A2.CODE2 = B_1.CODE3) LEFT JOIN C2 ON (C1.LINE = C2.LINE) AND (C1.NO = C2.NO) WHERE (((C1.NO)='X')) ORDER BY C1.NO, C1.LINE, C2.LINE2; と、考えたのですが、結果が X 1 A-1 AA-2 NAME-B-1 NAME-B-2 1 BIKO-1 X 1 A-1 AA-2 NAME-B-1 NAME-B-2 2 BIKO-2 X 2 A-3 AA-1 (null) NAME-B-1(null)(null) と、出てしまいます。 どうすれば良いのでしょうか ? 宜しくお願い致します。

  • 検索の仕方

    下記の場合の検索する方法を教えてください。 テーブル:abc id : キー xyz_id : xyzのキーが入る テーブル:xyz xyz_id : キー xyz_name : 適当な文字 テーブルabcに登録されていないテーブルxyzのxyz_idだけをSELECT文で抜き出したいのです。 大変、くだらない質問で恐縮ですが、よろしくお願いいたします。

  • Oracle[10g]のSQL文について

    ごぶさたしております。Oracle[10g]のSQL文についての 質問です。(No.???) [A]テーブルに [CODE](KEY) [CODE2] [NAME] のフィールドがあります。 A-1 B-1 NAME-1 A-2 B-2 NAME-2 A-3 B-3 NAME-3 [B]テーブルに [CODE2](KEY) [NAME-B] のフィールドがあります。 B-1 NAME-B-1 B-2 NAME-B-2 B-3 NAME-B-3 [C1]テーブルに [NO](KEY) [LINE](KEY) [CODE] のフィールドがあります。 X 1 A-1 Y 1 A-2 [C2]テーブルに [NO](KEY) [LINE](KEY) [LINE2](KEY) [BIKO] のフィールドがあります。 X 1 1 BIKO-1 X 1 2 BIKO-2 Y 1 1 BIKO-3 結果が [NO/LINE/LIN2/NAME-B/BIKO] X 1 1 NAME-B-1 BIKO-1 X 1 2 NAME-B-1 BIKO-2 Y 1 1 NAME-B-2 BIKO-3 と、なる様にしたいのです。問題は、[B]テーブルです。 今まで、教えていただいた事を参考に頑張ってみましたが、 思う結果がでません。宜しくお願い致します。

  • 別テーブルの検索した結果が0件のデータのレコードを削除したい

    SQL Server 2005 を使用しています。 別テーブルで検索した結果が0件の時、対応するレコードを削除したいのですが、SQLをどうかけば実現出来るかわかりません。 具体的には、テーブル Aとテーブル B があって、テーブル Aのキーが AA,AB,ACとします。 この時、テーブル Bにも AA,AB,ACという列があるとします。 この時に、テーブルBをAA,AB,ACでGROUP BYしてCOUNTをとった時にレコード数が0のキーのレコードを、テーブルAから削除したいのですが、この時SQLを一つで書きたいのです。 テーブル Aが明細、テーブル Bが名簿みたいな形で、名簿に存在しないレコードを削除するような感じです。 どういうSQLを書けばいいか少し悩んでいます。 AA,AB,ACは全て integer型です。 どなたかわかりましたら教えてください。

  • oracle テーブルコピー

    はじめまして 現在、oracle9iを使い、開発しています。 宜しければご回答の方をお願い致します。 スキーマAAAにあるテーブルBBBをテーブルデータは不要として スキーマCCCに同じ定義のテーブルBBBをコピー作成したいと考えています。 どのように行えば、良いのでしょうか。 当方、初心者ですが、何卒ご回答の程、よろしくお願い致します。

  • Oracleでルールベースでの複合索引

    数十万件のデータをバッチ処理を行っているのですが、パフォーマンスが悪く困っています。 その原因となりそうな部分について質問します。 テーブルAに複合索引を作ります。 create unique index uk_A on A(AA,AB,AC,AD); このテーブルに検索をかけます。そのときにWhere句に書く列の順序は、パフォーマンスには関係ないのでしょうか? select max(AD) from A where AA=1 and AB=2 and AC=3; としたときと select max(AD) from A where AC=3 and AB=2 and AA=1; としたときの、パフォーマンスの違いです。 このバッチ処理の中で、Aのテーブルに多数のデータを追加するために、コストベースにはできません。また、このSQL文は、プロシージャの中で使用しています。 範囲検索の場合のことは、講習でもあったのですが、等価結合のことは出てきませんでした。 どなたかご存知の方宜しくお願いします。

  • SQLで'ABC'をDBの'AB'にHIT

    sqlite3をVC++2013で扱っています。 もしかしたら、単純な方法があるのかもしれないので質問させてください。 DBに渡す文字が'ABC'でDB内のデータ'AB'にHITさせたいと思っています。 現状思いつく方法は select * from テーブル where キー like 'A%'; select * from テーブル where キー like 'AB%'; select * from テーブル where キー like 'ABC%'; と渡す文字を一文字ずつ増やして検索して row数が0以上の一番小さい数のデータを取得するという方法しか思いつかないのですが。 何か良い方法はありますでしょうか?

  • 検索スピードの速い方法を教えてください

    PostgreSQLを使ったJavaシステムで、検索スピードが最も速い方法を教えていただきたいと思います。 ・検索するテーブル(tblS)  scode Varchar 6 主キー  sname Varchar 30  stni Varchar 2  skmk Varchar 2  stnk Int4 ・検索する項目  入力されたnameがテーブルのsnameに存在した場合、他の4項目のデータを読み込む。  これを連続して5回(nameが5件ある)行う。 現在考えているのが、tblSのデータをArrayListに読込み、ArrayListの検索を行う方法です。 現在、tblSの件数は1500件ですが、日々増加しています。 どうかよろしくご教授ください。

  • MySQL で列内にワイルドカードがあるデータを検索できますか?

    以下のようなテーブルがあったとして、 id   name -- ---- 10   HOGE**1AA 11   H**1GE222 12   H*OGE*0AA 1.「HOG」で検索した場合、idが 10 と 11 のデータをヒットさせたい。 2.「HOGE321AA」で検索した場合、idが 10 のデータをヒットさせたい。 3.「H1O」で検索した場合、idが 11 と 12 のデータをヒットさせたい。 こんな事って可能でしょうか?

    • ベストアンサー
    • MySQL