• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLクエリで質問です)

SQLクエリで複数の検索条件を満たすレコードを取得する方法

yambejpの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

もしどうしても今のデータの持ち方をしたいのであれば create table hoge(id int,col1 int ,col2 int ,col3 int ,col4 int ,col5 int ,col6 int); insert into hoge values(1,3,1,0,5,4,12),(2,2,5,6,0,1,8); ここで0,1,5に合致するのであればこんな感じ select id from ( select id,col1 as col from hoge union all select id,col2 from hoge union al1 select id,col3 from hoge union all select id,col4 from hoge union all select id,col5 from hoge union all select id,col6 from hoge ) as fuga where col in (0,1,5) group by id having count(*)=3 そもそもが・・・ はっきり言えばデータの持ち方がわるい たとえばcol1とcol2は、優先順位や属性になにか違いがあるのでしょうか? colが同列のデータであればデータは横ではなく縦にもたなくてはいけません 最初からこうもっておけば create table hoge(id int,col int); insert into hoge values (1,3),(1,1),(1,0),(1,5),(1,4),(1,12), (2,2),(2,5),(2,6),(2,0),(2,1),(2,8); これだけで済みます select id from hoge where col in (0,1,5) group by id having count(*)=3 これをidごとに表示するならこんな感じ select id,group_concat(col) from hoge group by id

masadondon_don
質問者

お礼

詳しい回答ありがとうございます。 データそれぞれに属性をつけている状態ですので、 できればこの配列のまま使いたいのですが、 もう一度データ形式を見直してみます。 ありがとうございます。

関連するQ&A

  • SQL 文字列操作

    SQL(Oracle)のSELECT文で、以下の様なCOL1列において、 COL1 ---------- abc_def g_hi_jk 最初の_以降を削除して、 COL1 ---------- abc g の様に表示させるにはどうすればよいのでしょうか。 「abc_def」→「abc」 は、無理矢理(?)これでできたのですが… select replace('abc_def',substr('abc_def',instr('abc_def','_'))) from dual;

  • 特定の項目が同じ値のレコードを1件だけ出力するには

    教えて下さい。全くいいSQLが思い浮かびません^^; Table:Tbl(Primary Col1, Col2) ================================================ Col1, Col2, Col3, Col4, Col5, Col6 ------------------------------------------------ No1, Row1, ABC1, 1, DEF1, 1 No1, Row2, ABC1, 1, DEF1, 2 No2, Row1, ABC1, 1, DEF1, 1 No2, Row2, ABC1, 1, DEF1, 2 ================================================ 以上のテーブル情報の時、 Col3とCol4をキーにしてレコードを抽出します。 但し、抽出するレコード内容にCol5とCol6が同一なレコードは1件もありません。 上記テーブルから取り出したいレコードは以下の通りです。 Table:Tbl(Primary Col1, Col2) ================================================ Col1, Col2, Col3, Col4, Col5, Col6 ------------------------------------------------ No1, Row1, ABC1, 1, DEF1, 1 No1, Row2, ABC1, 1, DEF1, 2 ================================================ どういうSQLで上記のような抽出が可能になるでしょうか? 宜しくお願い致します。

  • カウントして抽出するsqlをまとめたい

    mysql初心者です。宜しくお願い致します。 PHP+Mysqlで以下のスクリプトを組んでいます。 変数aを一旦決めておき、カウント結果次第で変数aの値を広げるというものです。 これをSQL文一発にまとめたいのですが、可能でしょうか? mysqlのバージョンは5.1.34です。お詳しい方、ご教授お願い致します。 $a = 10; //仮に10 $query = "SELECT COUNT(*) AS cnt FROM mydb WHERE col_a BETWEEN ( 100 - $a ) AND ( 100 + $a ) AND col_b BETWEEN ( 100 - $a ) AND ( 100 + $a )"; $result = mysql_query($query); $row = mysql_fetch_array($result); if($row[cnt] < 10){$a = 20;} //件数が10件以下ならaの範囲を広げて結果取得 $query = "SELECT * FROM mydb WHERE col_a BETWEEN ( 100 - $a ) AND ( 100 + $a ) AND col_b BETWEEN ( 100 - $a ) AND ( 100 + $a )"; $result = mysql_query($query);

    • ベストアンサー
    • MySQL
  • ACCESS2000でクエリを抽出条件で抽出

    VBA上でクエリの抽出データを取得してファイルに書き込むというプログラムを書いております。 抽出条件として、今日の日付のレコードを取得したいのですが型が一致しませんとエラーになります。 strSQL = "SELECT * FROM " & (クエリー名)& " where (クエリー.カラム名)='" & Format(Date, "yyyy/mm/dd") & "'" クエリーのカラム名は全角漢字です。 どこがおかしいのでしょうか? よろしくお願いいたします。

  • SQLクエリ

    以下のようなAccessのテーブルがあったとします。   time  -------------- (1) 200207050545 (2) 200207050546 (3) 200207050733 そこで、以下のようなクエリを実行したとします。 SELECT time from table WHERE time <= '200207050546' 当然、得られる結果は(1)(2)です。 しかし、条件を『time <= 'a'』にすると、(1)(2)(3)の結果が得られてしまいます。 条件が『time <= 'a'』のときはレコードなしにしたいのですが、 どうすればよいでしょうか?

  • sqlplusのspoolで空白行出現

    OS:Windows Server 2003 DB:Oracle10g(10.2.0) sqlplusでselect結果をcsvファイルにspoolする際に空白行が出力されて困っています。 以下のsqlを実行した場合、 ----- SET ECHO OFF SET FEEDBACK OFF SET HEADING OFF SET PAGESIZE 0 SET LINESIZE 2000 SET TERMOUT OFF SET TRIMSPOOL ON spool test.csv select '"'||col1||'","'||col2||'","'||col3||'"' from table; spool off ----- 改行を含むカラムを含む行の後に空白行が出力されます。 (2レコード目のcol3は"g"と"h"の間に改行コードがあるデータが格納されているが、何故か2レコード目と3レコード目の間に空白行が出力される) ----- "abc","def","ghi" "abc","def","g hi" "abc","def","ghi" ----- これはsqlplusの仕様でしょうか。 2行目と3行目の間の空白行を削除してspoolする方法はありますでしょうか。 なお、改行を含むカラムの改行を改行以外の文字に置換して出力した場合は、以下のように空白行が出現しません。 ----- "abc","def","ghi" "abc","def","gカイギョウhi" "abc","def","ghi" -----

  • sqlのクエリについて

    C#からデータベースsql server 2008にデータセット、データリードする簡単なアプリを作りました sqlのクエリについて質問です リードしたデータのTOP行と最終行の2つのレコードを取得する場合どうすればいいでしょうか? select TOP A,B,C From test WHERE なら TOP行のみになってしまいます 最終行のレコードの取得方法は、いい方法が思い浮かびません。 欲しいのは、TOP行と最終行の2行のみなので、困ってしまいました。 知恵をお借り願えればと思います。 よろしくお願いいたします。

  • 複数行のクエリを、まとめて実行するには?mysqli_multi_query()?

    PHPとMySQLの環境です。 複数行のクエリを、まとめて送って取得したいと考えています。 ですが、今試行錯誤しているのですが、うまく行かない状態で、クエリをきちんと実行できません。 処理の流れとしては、 [DBにアクセス]→[2つのクエリの実行]→[データ取得]→[DBをクローズ] でいいのではないかと思ってやっているのですが、 2つのクエリを実行するのはなにやら無理なような記述もウェブ上で拝見しました。 その場合、同じDBの同じテーブル内の異なるデータを取得したいだけなのに、 わざわざ、一度DBにコネクトして、切断、そしてまたコネクトして、切断ということを繰り返さないとダメなのでしょうか。。? そもそも同一PHPファイル内で二度も接続、切断はすべきではないですか? ちなみに、 一つ目のクエリでは、テーブル(table_a)のレコード数をカウントしてPHP側で取得するという流れの処理です。 $query = "SELECT count(*) FROM `table_a`"; もう一つのクエリは、テーブル(table_a)の最新のレコードの、idカラムのidを取得するだけのものです。 $query = "SELECT arrayset FROM `table_a` ORDER BY id DESC LIMIT 1"; この処理を一度のクエリで入れ込むことは可能でしょうか。 それぞれ単独では実行できます。 PHPでこのような関数 mysqli_multi_query() を見つけて色々調べているのですが、 いまだに使用方法がきちんとつかめない状況です。 これで複数のクエリを送ることは可能でしょうか。 アドバイス宜しくお願いします。

    • ベストアンサー
    • MySQL
  • find_or_createのようなクエリを出したい

    お疲れ様です。 お世話になります。 データベースにあるキーを基にSELECTを出して、該当レコードがあればそのレコードのIDを取得、 なければ、そのキーをINSERTして、INSERT_IDを取得する。 これをひとつのクエリでできないかと悩んでいます。 perlだとfind_or_createというメソッドがあるらしいのですが、 私はPHP書きです。 DBはMySQL5を使っています。 PHPも5xです。 ググってもあまりいい案はなく、ムリならムリと突きつけていただければ 2つのクエリでがんばります。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • Oracle SQLで文字列操作

    始めまして。 VB6でプログラミングをしています。DBはOracle8.16です。 Oracleテーブル上で、カテゴリー別に " 文字列 & ナンバリング " の値をもつレコードを、インサートしていく作業をしています。 ナンバリングの部分の現在の最大値に1足したものを、 新規レコードで値を持たせインサートしてます。 tblA Col1           Col2 1            NA-P1-1 1            NA-P1-2 1            NA-P1-3 1            NA-P1-4 3            NA-P3-1 3            NA-P3-2 3            NA-P3-3 1   この場合、 Select max(Col2) from tblA where Col1 = 1 で現在のCol1=1のMax値(Col2)は NA-P1-4 と取り出せるできるんですが、新規に追加するレコードのCol2の値が NA-P1-5だと取得できる方法はあるでしょうか。 Select Max(col2)+1 ~だと、カラム定義がvarchar2なんで、 当然のようにシステムに怒られました(当然ですが。。) お分かりの方、お願い致します。