質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

3回答

997閲覧

SQL : WHERE句による絞り込みについて

alitomo

総合スコア41

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2021/09/21 01:53

編集2021/09/21 10:15

購入者ID 商品

1     a

1     b

2     a

2     b

4     c

5     d

3     e

上のように購入者1と2がそれぞれaとbの商品を購入しているばあい、where句で

商品 = a AND  商品 = b

として絞り込みしたら、何もヒットせずに結果が帰って来ます。

商品aとbの両方を購入した人を抽出するのはどのようにしますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2021/09/21 07:55

WHERE区 ↓ WHERE句
alitomo

2021/09/21 10:15

校閲ありがとうございます。(_ _)
guest

回答3

0

何もヒットせずに結果が帰って来ます。

はい、同じ行商品 = a商品 = bは同時に成立しませんので、ヒットする行は存在しえません。

商品aとbの両方を購入した人を抽出するのはどのようにしますでしょうか?

行単位の抽出ではできませんので、GROUP BYで購入者ID別に集計をかけて、その結果からHAVINGで抽出する必要があります。

投稿2021/09/21 02:10

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

alitomo

2021/09/21 03:06

group byで集計をかけると、 1 a 2 a とbが丸まってしまうのですが、これはどのようにしたら良いでしょうか?
maisumakun

2021/09/21 03:10

> group byで集計をかけると、 1 a 2 a とbが丸まってしまうのですが、 どのようなSQLを書いたのですか?
alitomo

2021/09/21 03:39

select * from order_t group by 購入者ID; と致しました。
maisumakun

2021/09/21 03:43

どのような結果を得たくて、select *で書いたのでしょうか?
sazi

2021/09/21 03:50

>@alitomoさん > select * from order_t group by 購入者ID; 標準の文法では、select項目はgroup byしないとエラーです。 MySQLを使用していて、ONLY_FULL_GROUP_BYオプションがoffだとエラーになりません。 先ずは、標準のSQLを理解される事をお薦めします。
alitomo

2021/09/21 04:47 編集

皆様ご回答ありがとうございます。 ご指摘の点を改めて確認して、今度は select 購入者ID from order_t group by 購入者ID having 商品 = 'a' and 商品 = 'b'; ; このようにしましたが、今度は Error Code: 1054. Unknown column '商品' in 'having clause' となり、エラーが出てしまいます。
maisumakun

2021/09/21 04:48

エラーメッセージのとおりです。havingは集計後の列からしか条件を取れません。
guest

0

ベストアンサー

SQL

1create table tbl(ID int primary key,user int,products varchar(10)); 2insert into tbl values 3(1,1,'a'), 4(2,1,'b'), 5(3,2,'a'), 6(4,2,'b'), 7(5,2,'b'), 8(6,2,'c'), 9(7,3,'a'), 10(8,3,'a'), 11(9,4,'c'); 12 13select user from tbl 14where products in ('a','b') 15group by user 16having count(distinct products)=2

投稿2021/09/21 02:28

yambejp

総合スコア116734

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

alitomo

2021/09/21 10:14 編集

in句でaまたはbで絞り込みをかけて、having句で該当する要素の数で両方を満たす値を抽出しているのですね。参考になりました。ありがとうございます。 また検証しやすいように元データを作成するコマンドも恐れ入ります。(_ _)
guest

0

where in コマンドがいいと思います。
https://www.sejuku.net/blog/72497

投稿2021/09/21 02:41

masakifukuta

総合スコア58

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

alitomo

2021/09/21 05:48

ありがとうございます。調べてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問