
はじめまして。初めて質問させて頂きます。
現在、システムを作成しています(開発が主業務ではありませんが)。
が、作成途中で詰まっていますので、ご教授願えれば、と思い質問させて頂きます。
いくつかの条件(氏名、内容、レベル)をユーザに入力してもらい、その条件に合致しているデータを抽出するSQLを発行したいのですが、なかなかうまくいきません。
現状では、上記3つの条件を全て入力すれば結果が反映されるのですが、1つずつで絞り込むことができません。
例えば、レベルの選択タブで「2」をユーザが選んだ場合、その条件に合致するあらゆる内容のレベル2の人が出てきてほしいのです。
また、内容で「攻撃」を選んだ場合、攻撃のレベルは関係なく全ての条件が出てきて欲しいのです。
カラオケで選曲をする際に機械を使うと思いますが、あのようなものを作成したいのです。
「ゆず」を検索する際に、「ゆ」を入れた時点で「ゆ」から始まるアーティスト名が抽出され、次に「ず」を入れると抽出件数が減ります。
あのような動作はSQLだけで行えるものなのでしょうか。
ネットで検索してもいまいち理解ができません。
どなたかご教授をお願い致します。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
>例えば、「ゆ」で始まる文字列が100万件あったとして、「ゆ」「ず」という文字列の並びを検索すると
>該当件数が50万件になる、という検索方法です。
あくまで、Oracle側で行う処理は、前方一致(Like)検索になります。
一般的には、フロントエンドのアプリケーションで、入力項目が変異する都度、
DB検索と検索結果表示を行う仕組みとなります。
入力の邪魔を邪魔しないような非同期検索の仕組みをアプリケーションに組み込めば良いかと。
フロントエンドのアプリケーションをどんな環境・言語で書くのか判らないので、
これ以上の説明はできません。
No.2
- 回答日時:
#1です
おそらく貴方のしたい事はDB(oracle)レベルでは実装できないと思います。
DBを利用するアプリケーション側(たとえばASP+JavaScript)ですれば可能です。
No.1
- 回答日時:
>>例えば、レベルの選択タブで「2」をユーザが選んだ場合、その条件に合致するあらゆる内容のレベル2の人が出てきてほしいのです。
SELEC * from テーブル名 where レベル = '2'
これでレベルが2のレコードはすべて取得できます。
>>「ゆず」を検索する際に、「ゆ」を入れた時点で「ゆ」から始まるアーティスト名が抽出され、次に「ず」を入れると抽出件数が減ります。
SELEC * from テーブル名 where アーティスト名 LIKE 'ゆ%’
これでアーティスト名がゆで始まるレコードがすべて取得できます。
参考までに
最後が「ず」を検索したければ LIKE '%ず’
ゆを含むものは LIKE '%ゆ%'
>>また、内容で「攻撃」を選んだ場合、攻撃のレベルは関係なく全ての条件が出てきて欲しいのです。
内容に入るデータが「殴る」とか「撃つ」「食べる」等が入るとすると
そのままでは抽出できないので、内容を一通り格納するテーブル「内容マスター」みたいなものを作りましょう。
そのテーブルには
ID 内容 内容種別
1 殴る 攻撃
2 撃つ 攻撃
3 食べる 食事
等が格納され
SELEC * from テーブル名 LEFN JOIN 内容マスター ON テーブル名.内容=内容マスター.内容 where 内容マスター.内容 = '攻撃'
にて抽出できます。
この回答への補足
お忙しいところご回答ありがとうございます!
ただ、私の表現が下手なため質問内容がうまく伝わっていないので、補足して質問させて頂きます。
>SELEC * from テーブル名 where アーティスト名 LIKE 'ゆ%’
ここは理解できます。問題は次です。
「ゆ」で始まる言葉の検索方法ではなく、「ゆ」の次に「ず」という文字が続くものを検索したい場合にどうすれば良いか、という質問でした。
例えば、「ゆ」で始まる文字列が100万件あったとして、「ゆ」「ず」という文字列の並びを検索すると該当件数が50万件になる、という検索方法です。
「ゆ」はそのままに、「ゆず」という文字列を検索したい、さらにその先も「か」と入力することで抽出結果が絞り込まれていくようなSQLを打ちたいのです。
表現が稚拙すぎて申し訳ないのですが、どうか内容を理解頂けますようお願い申し上げます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
単一グループのグループ関数で...
-
group byの並び順を変えるだけ...
-
データ
-
PL/SQL内の共通関数の引数にフ...
-
1レコード全てを改行なしで表...
-
トランザクションログを出力せ...
-
引数によってwhere句を切り替え...
-
SQL*Loader Append
-
【PL/SQL】FROM区に変数を使う方法
-
SELECT FOR UPDATE で該当レコ...
-
AccessのSQL文で1件のみヒット...
-
アクセスのレポートでレコード...
-
「数字で始まらない」ものを抽...
-
osqleditについて
-
大量レコードをTRUNCATEせずに...
-
GROUP BYを使用したCOUNT
-
Oracleですがsqlで質問です。 ...
-
一部のレコードをバックアップ...
-
oracle DB内のデータを増幅す...
-
値が入っていない日付型の項目...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
単一グループのグループ関数で...
-
SELECT FOR UPDATE で該当レコ...
-
【PL/SQL】FROM区に変数を使う方法
-
where句中のtrim関数について
-
データ
-
SQL*Loader Append
-
AccessのSQL文で1件のみヒット...
-
引数によってwhere句を切り替え...
-
トランザクションログを出力せ...
-
updateで複数行更新したい
-
アクセスのレポートでレコード...
-
group byの並び順を変えるだけ...
-
「数字で始まらない」ものを抽...
-
osqleditについて
-
SQLで条件にヒットしたレコード...
-
デフォルトでデータが表示され...
-
BLOB型項目をSQLの検索条件に指...
-
1レコード全てを改行なしで表...
-
トリガからプロシージャのコー...
-
PL/SQLでフェッチでNULLの項目...
おすすめ情報