【SQL】SELECT文で購入フラグが1のユーザ名を抽出する方法
- OracleのSQLを勉強中の方からの質問です。商品購入テーブルから購入フラグがすべて「1」のユーザ名を抽出するSELECT文を教えてほしいとのことです。
- テーブルにはユーザ名、商品名、購入フラグの情報があり、購入フラグが「1」のユーザ名を抽出する必要があります。
- テーブルから抽出されるユーザ名は、002と003です。
- ベストアンサー
【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のユーザが抽出される形となります。 以上、よろしくお願いいたします。
- ryota_wjp
- お礼率100% (1/1)
- Oracle
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
試験してませんが。 not in は not exists でもOK。 select ユーザ名 from 商品購入テーブル where 購入フラグ = 1 and ユーザ名 not in ( select ユーザ名 from 商品購入テーブル where 購入フラグ = 0 ) ただし、002、003、003が得られるハズ。 002、003のみにしたいのであれば最初のselect ユーザ名 を select distinct ユーザ名 にしてください。
関連するQ&A
- 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が小さいもの 以上、よろしくお願いします。
- ベストアンサー
- PostgreSQL
- 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
- 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を組んだら実現できますか? よろしくお願いいたします。
- ベストアンサー
- PostgreSQL
- 分岐SQLを一発のSQLで実現したい
【データベース:SQLServer2005】 SQLのアドバイスを頂きたいです。 【テーブル】 テーブル名:Table1 フィールド名:種類、キー1、キー2 テーブル名:Table2 フィールド名:種類、キー1、キー2 テーブル名:Table3 フィールド名:種類、キー1、キー2 【データ】 Table1 種類、キー1、キー2 001 AAA BBB 001 AAA CCC 001 AAA DDD Table2 種類、キー1、キー2 002 AAA BBB 002 AAA CCC NULL AAA DDD Table3 種類、キー1、キー2 NULL AAA BBB NULL AAA CCC NULL AAA DDD これをUNIONで取得します。 種類、キー1、キー2 001 AAA BBB 001 AAA CCC 001 AAA DDD 002 AAA BBB 002 AAA CCC NULL AAA DDD NULL AAA BBB NULL AAA CCC 実現したいのは、 1)同種類、キー1、キー2のデータで、 種類にNULLが含まれていたら、NULLのデータは取得しない 2)同種類、キー1、キー2のデータで、 種類にNULLしかないデータは、取得する 001 AAA BBB 001 AAA CCC 001 AAA DDD 002 AAA BBB 002 AAA CCC NULL AAA DDD →いる NULL AAA BBB →いらない NULL AAA CCC →いらない ↓結果 001 AAA CCC 001 AAA DDD 002 AAA BBB 002 AAA CCC NULL AAA DDD 上記を実現する為、UNION後のSQLでも構わないので、 一発のSQLで取得する事は可能でしょうか? 有識者の方にご享受頂ければ幸いです。 どうぞ宜しくお願い申し上げます。
- ベストアンサー
- SQL Server
- SQL 複数条件を設定
PostgreSQLを使用しております。 それぞれ、TABLE1とTABLE1があり、 TABLE1 a-1 a-2 b-1  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 1 bbb aaa ddd 2 ggg bbb ccc 3 bbb mmm ddd 4 ggg mmm ccc : TABLE2 a-1 a-2 c-1  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 1 bbb aaa eee 2 ggg mmm qqq : 質問1. TABLE1.a-1=TABLE2.a-1 and TABLE1.a-2=TABLE2.a-2 を条件にして結合 したい場合、どのように結合すればよいのか。 期待結果 a-1 a-2 b-1 c-1  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 1 bbb aaa ddd eee 2 ggg bbb ccc ※ 3 bbb mmm ddd ※ 4 ggg aaa ccc qqq ※は空白でもNULLでもよい 質問2. 上記が可能な場合にさらに質問です。 TABLE1およびTABLE2が、SELECT,WHEREによって抽出されたものとした場合、 1つのSQL文で質問1と同様の出力にするにはどのように結合すればよいのか。(はたまた無謀なのか) 知識不足のため悩んでいる状況なので、 どなた様か知識がある方にご教授願いたく思います。
- ベストアンサー
- PostgreSQL
- 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 Server
- SQL SERVER INSERT文
決まった件数単位にデータをINSERTしたい。 例)仕入明細→仕入伝票明細(行は2行まで) 仕入明細 商品CD 商品名 数量 000001 AAA 1 000002 BBB 2 000003 CCC 3 000004 DDD 1 000005 EEE 2 を仕入伝票明細へINSERTするときに2行単位に伝票ID、行をつけて INSERTしたい 仕入伝票明細へは 伝票ID 行 商品CD 商品名 数量 001 1 000001 AAA 1 001 2 000002 BBB 2 002 1 000003 CCC 3 002 2 000004 DDD 1 003 1 000005 EEE 2 伝票IDはコントロールの伝票IDに+1してセットする こんな感じのINSERT文を作りたいのですが、どなたか教えてください 宜しくお願いします
- 締切済み
- SQL Server
- 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の値も文字数以外は規則性があるわけではないので無限パターンです。 詳しい方よろしくお願いします。
- ベストアンサー
- その他(データベース)
- SQL上位n件ORDERBY 以降ORDERBY
SQLのORDER BYについてご教授いただけますでしょうか。 例えば、10件のデータのうち、5件を指定のORDERBYで抽出し、 残り5件をORDERBYで抽出するということは可能でしょうか。 ID 名前 システムフラグ 1 AAA 1 2 BBB 1 3 CCC 1 4 DDD 1 5 EEE 1 6 FFF 2 7 GGG 2 8 HHH 1 9 III 1 10 JJJ 1 上記のようなデータがあった場合、 以下のように抽出されるようにしたいと思っています。 ID 名前 システムフラグ 1 AAA 1 2 BBB 1 3 CCC 1 6 FFF 2 7 GGG 2 4 DDD 1 5 EEE 1 8 HHH 1 9 III 1 10 JJJ 1 システムフラグが2が入っているものは、 5件からの4,5件目に表示されるようにして、 それ以降はIDの昇順で表示されるようにしたいと思っております。 5件というのは、決め打ち5件ではなく、条件によっては変わるのですが、 5件が7件となった場合は、6,7件目がシステムフラグ2のものがくるようにしたいです。 指定した件数から下2つ目がシステムフラグのものが取得したいということです。 わかりにくいと思いますが、どのようなSQLを書けば抽出できるか ご教授いただけますでしょうか。 どうぞ宜しくお願い致します。
- ベストアンサー
- SQL Server
お礼
bin-chan様 分かりやすいご回答を頂きありがとうございました。 実行確認できました。 「not in」ですよねーー。 初心者の稚拙な質問にご回答いただき、大変感謝しております。