• ベストアンサー
  • 困ってます

【SQL】SELECT文

こんにちは。OracleのSQLを勉強中の者です。 SELECT文について質問させてください。 下記のテーブルから購入フラグがすべて「1」のユーザ名を抽出したいのですが、SQL文をご教授いただけますでしょうか。 テーブル名:商品購入テーブル ユーザ名   商品名    購入フラグ ---------- ---------- -------------- 001      AAA       1 001      BBB       1 001      CCC       0 002      DDD       1 003      AAA       1 003      EEE       1 004      CCC       0 このテーブルからですと、002と003のユーザが抽出される形となります。 以上、よろしくお願いいたします。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数252
  • ありがとう数1

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

  • ベストアンサー
  • 回答No.1
  • bin-chan
  • ベストアンサー率33% (1403/4213)

試験してませんが。 not in は not exists でもOK。 select ユーザ名 from 商品購入テーブル where 購入フラグ = 1 and ユーザ名 not in ( select ユーザ名 from 商品購入テーブル where 購入フラグ = 0 ) ただし、002、003、003が得られるハズ。 002、003のみにしたいのであれば最初のselect ユーザ名 を select distinct ユーザ名 にしてください。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

bin-chan様 分かりやすいご回答を頂きありがとうございました。 実行確認できました。 「not in」ですよねーー。 初心者の稚拙な質問にご回答いただき、大変感謝しております。

関連するQ&A

  • SQL文を教えてください。

    すみません、SQLを教えてください。 ID, 名前の2つのフィールドを持つテーブルがあります。 中身は以下のように入っています。 1, AAA 2. AAA 2, BBB 3, CCC 3, AAA 4, DDD 5, EEE, 5, DDD これを、名前のダブリをスキップしながら、 IDの大きな順番に名前を取り出したいのです。 結果は、以下のようになればいいです。 DDD EEE AAA CCC BBB どのようなSQLを組んだら実現できますか? よろしくお願いいたします。

  • SQLについて

    aaa bbb ccc ddd eee ggg hhh ---------------------------------------------- 111 111 111 111 111 111 111 112 112 112 112 112 112 111 112 113 113 113 113 113 111 114 114 114 114 114 114 111 114 114 114 114 114 114 112 114 115 115 114 114 115 111 114 115 115 114 114 115 112 116 116 116 116 116 116 111 116 116 116 116 116 116 112 116 116 116 116 116 117 111 116 116 116 116 116 117 112 118 118 118 118 118 118 118 上記のようなデータより、SQLのSELECTを使用して、以下のように抽出したいです。 抽出条件は以下が全て満たしているものとなります。 ・aaa,ccc,ddd,eee,gggが重複、hhhが小さいもの ・bbbが異なるもの aaa bbb ccc ddd eee ggg hhh ---------------------------------------------- 112 112 112 112 112 112 111 ・・・(1) 112 113 113 113 113 113 111 ・・・(1) 114 114 114 114 114 114 111 ・・・(2) 114 115 114 114 114 115 111 ・・・(2) (1)はaaa,ccc,ddd,eee,gggが重複、bbbが異なるため抽出対象 (2)はaaa,ccc,ddd,eee,gggが重複、bbbが異なるため抽出対象  また、hhhが小さいもの 以上、よろしくお願いします。

  • SQL文について

    お世話になります。 Oracle初心者です。 二つのテーブルから下記の様にデータを抽出 したいのですが、その方法をご教授くださいます様、 宜しくお願い致します。         記 テーブル1 品番  全長 aaa 1111 bbb 2222 ccc 3333 テーブル2 品番  入数 bbb 5 ddd 6 ggg 7 SQL結果 品番 全長  入数 aaa 1111 bbb 2222 5 ccc 3333 ddd 6 ggg 7

  • SQL文の書き方

    SQL文の書き方を教えて下さい。 以下の2つのクエリー(1のクエリー&2のクエリー)を1つのクエリーで1度に抽出をかけたいのですがSQL文の書き方がわかりません。 データの発生条件としては TableBのField1は必ずTableAのField1に存在するという条件です。 TableAのField1が「AAA」から「EEE」まである場合は、TableBのField1も必ず「AAA」から「EEE」の範囲内で発生します。 よろしくお願い致します。 1のクエリー ---------------------------------------------------------------- TableA Field1 ---------------------------------------------------------------- AAA AAA AAA BBB BBB CCC DDD DDD EEE EEE EEE ---------------------------------------------------------------- Field1をサマライズしてカウントと名称を取得するクエリー Select Count(TableA.Field1) as RecCount, TableA.Field1 From TableA 結果 RecCount  Field1 3      AAA 2      BBB 1      CCC 2      DDD 3      EEE ---------------------------------------------------------------- 2のクエリー ---------------------------------------------------------------- TableB Field1 ---------------------------------------------------------------- BBB CCC CCC EEE ---------------------------------------------------------------- Field1をサマライズしてカウントと名称を取得するクエリー Select Count(TableB.Field1) as RecCount, TableB.Field1 From TableB 結果 RecCount  Field1 1      BBB 2      CCC 1      EEE ---------------------------------------------------------------- 希望する結果 TableAのRecCount TableBのRecCount TableAのField1 3                   AAA 2         1         BBB 1         2         CCC 2                   DDD 3         1         EEE

  • SQL文で数字+指定文字列がヒットする記述方法

    mySQLを使ってます。 SQL文で以下のことが実現したいです。 フィールドに登録されている文字列が http://www.AAA.jp/BBB/CCC/08191.html/?cp=waribiki http://www.AAA.jp/shop/DDD/EEE/08191.html http://www.AAA.jp/shop/DDD/EEE/ZZZ.html というタイプがあります。 SQL文で検索結果を表示したいのは、 http://www.AAA.jp/shop/DDD/EEE/数字.html のように右から「数字.html」の場合のURLパスだけを抽出したいです。 SELECT * FROM `テーブル名` WHERE `フィールド名` LIKE '%html' とやってみましたが、 http://www.AAA.jp/shop/DDD/EEE/ZZZ.html というものもヒットしてしまうため 右から「数字.html」の場合だけのSQL文の書き方を教えていただけないでしょうか? よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • SELECT時に可能な動作は?

    例えば Aテーブル NO 名前 1 aaa 3 bbb 4 ddd 6 eee というデータの入ったテーブルからデータを取得する際に 1 aaa 2 0 3 bbb 4 ddd 5 0 6 eee という風に間が抜けたデータ(この場合2と5)をフェイクとして行に追加した状態で取得するSQL文は存在しますでしょうか?

  • OraclのSQL文について(No3)

    何度も恐縮です。また、違った事が出てきました。(^^; Oracl の SQL文について、教えて下さい。 [A]テーブルに [CODE] と [NAME]フィールドがあるとします。 内容は、 A-1 NAME-1 A-2 NAME-2 A-3 NAME-3 と、します。 [B]テーブルに [CODE] と [NOUKI] と [KIN] と [CODE2] フィールドがあるとします。 内容は、 A-1 2005/01/01 100 AAA A-1 2005/01/02 200 BBB A-2 2005/01/01 300 CCC A-2 2005/01/10 400 DDD A-2 2005/12/10 500 EEE と、します。 結果が、 A-1 NAME-1 300 AAA A-2 NAME-2 1200 CCC と、なる様にする為には、どういうSQL文を書けば良いのでしょうか ? つまり、[CODE2]のフィードは一番最初を表示させたいのです。 SELECT A.CODE, A.NAME, B.CODE2, SUM(B.KIN) FROM A, B WHERE A.CODE = B.CODE GROUP BY A.CODE, A.NAME,B.CODE2 ORDER BY A.CODE と、すれば A-1 NAME-1 AAA 100 A-1 NAME-1 BBB 200 A-2 NAME-2 CCC 300 A-2 NAME-2 DDD 400 A-2 NAME-2 EEE 500 と、言う結果がでます。(当然ですが) これは、1つのSQL文では無理なのでしょうか ? よろしくお願い致します。

  • SQLについて

    レコード1 |レコード2 |レコード3 AAA |1111 |0000 BBB |1111 |0000 CCC |2222 |2222 CCC |3333 |2222 CCC |4444 |2222 上記のようなテーブルがあった場合、レコード1のAAAとBBBは値をそのまま抽出し レコード1のDDDはレコード2とレコード3の値が一致しているものを抽出したいのですが ひとつのSQLで実現することは可能でしょうか? レコード2とレコード3の値が一致しているものを抽出だけなら簡単にできそうなのですが AAAとBBBもというところで悩んでます。どうかご教授ください。

  • SQLについてお聞きします

    フィールド1 |フィールド2 |フィールド3 AAA |1111 |0000 BBB |1111 |0000 CCC |2222 |2222 CCC |3333 |2222 CCC |4444 |2222 上記のようなテーブルがあった場合、フィールド1のAAAとBBBは値をそのまま抽出し フィールド1のDDDはフィールド2とフィールド3の値が一致しているものを抽出したいのですが ひとつのSQLで実現することは可能でしょうか? フィールド2とフィールド3の値が一致しているものを抽出だけなら簡単にできそうなのですが AAAとBBBもというところで悩んでます。どうかご教授ください。

  • SQLで○○の値以外を持っているレコードを抽出しないという条件を作りた

    SQLで○○の値以外を持っているレコードを抽出しないという条件を作りたいのですが・・・ 例えばこんな感じのテーブルがあったとします。 A1 A2 A3 -- -- -- AAA AA 111 AAA AB 111 AAA BB 222 BBB BB 111 CCC AA 111 CCC AC 555 DDD BB 222 EEE AA 111 EEE AC 333 EEE BB 777 A2の列に「BB」の値"しか"持っていないレコードを抽出したいのです このテーブルで言えば返りは BBB BB 111 DDD BB 222 と期待しています。 値BBのみしか持ってない条件の作り方を御教示願えませんでしょうか。 また、A2の値も文字数以外は規則性があるわけではないので無限パターンです。 詳しい方よろしくお願いします。