🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

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

Q&A

解決済

1回答

949閲覧

MYSQLでのSELECT文について

sqlnayami

総合スコア5

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

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

0グッド

0クリップ

投稿2019/10/30 12:42

MYSQLでのSELECT文での検索文について

以下の三つのテーブルがあるとします。
user

user_id name
1 山田
2 細木
3 鈴木
4 佐藤

product

product_id car_name
1 クラウン
2   カムリ
3 プリウス
4 スカイライン
5 セレナ
6 ノート
7 アコード
8 フィット
9 フォレスター
10  BMW

genre

genre_id genre_name
1 燃費が良い
2 デザインが良い
3 コストパフォーマンスが良い
4 安い
5 高級
6  速い
7  買いたい
8  好き

like

like_id user_id product_id genre_id
1 1    1 5
2 1  3 1
3   1  3 7
4   1 3 8
5 2 8 1
6 2 8 9
7 2 8 7
8 2 10 5
9 3 3 1
10 3 3 7
11 3 3 8
12 3 6 8
13 4 6 7
14 4 6 8
15 4 10 5

上記Likeテーブルからproduct_idが「3」で、 genre_idが「1」「7」「8」の「3つ全て」を選択しているユーザーの「user_id」と「product_id」を下記のように2行で検索結果を出したい場合、どのようなSQL文を書けばよいでしょうか?

(検索結果)

user_id product_id 
1 3   
3 3

SELECTFROM like 
WHERE product_id=3 AND (genreID=1 AND genreID=7 AND genreID=8)
では1つもひっかりませんし、
SELECT
FROM like 
WHERE product_id=3 AND (genreID=1 OR genreID=7 OR genreID=8)
では望んでいる結果が得られません。
どのようなSQL文を書けば望んでいる結果(条件を満たしている「user_id」と「product_id」を検索結果として出したい)を検索できるでしょうか。

宜しくお願い致します。

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

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

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

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

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

gentaro

2019/10/30 12:52

「望んでいる結果が得られません」という表現じゃなく、そのクエリを実行した結果をちゃんと記載してください。(回答者が予測することは可能ですが、ただ余計な手間をかけさせているだけです)
sqlnayami

2019/10/30 19:44 編集

失礼いたしました。 下記クエリを実行した結果は以下の通りです。 なお、テーブル名「like」は不適切との事だったので、like→eva、like_id→eva_idに変更しました。 (SQL文) SELECT * FROM `eva` WHERE product_id =3 AND (genre_id =1 OR genre_id =7 OR genre_id =8) (実行結果) eva_id user_id product_id genre_id 2   1   3   1 3   1   3   7 4   1   3   8 9   9   3   1 10    3   3   1 11   3   3   8
guest

回答1

0

ベストアンサー

たぶんこんな感じでできると思います。

SQL

1SELECT user_id, product_id FROM like 2WHERE product_id = 3 AND (genre_id = 1 OR genre_id = 7 OR genre_id = 8) 3GROUP BY user_id, product_id 4HAVING COUNT(*) = 3

ちなみに like は SQL の構文に使われる単語なので、
紛らわしすぎるのでテーブル名に使わないほうが良いと思います。

投稿2019/10/30 14:04

編集2019/10/30 14:06
tanishi_a

総合スコア484

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

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

sqlnayami

2019/10/30 20:07

回答ありがとうございます! 希望通りの実行結果が出ました。m(_ _)m ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問