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

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

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

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQL

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

1回答

3988閲覧

中間テーブル(交差テーブル)を用いてDBを構築したときに、複数の特徴に合致する値を取り出したい。

tokumei000

総合スコア17

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQL

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

1クリップ

投稿2020/07/24 09:57

編集2020/07/25 05:49

実現したいこと

中間テーブル(交差テーブル)を用いてDBを構築したときに、複数の特徴に合致する値を取り出したいと考えています。

例えば果物が以下のような複数の特徴を持っており、これを交差テーブルを用いて構築したとします。

  • リンゴ(甘い、かたい)
  • バナナ(甘い、やわらかい)
  • レモン(甘い、すっぱい)

fruit(果物テーブル)

idnameprice
1リンゴ100
2バナナ120
3レモン130

characteristic(特徴テーブル)

idname
1甘い
2すっぱい
3やわらかい
4かたい

fruit_characteristic(交差テーブル)

idfruit_idcharacteristic_id
111
214
321
423
532
633

このような状況において「甘い」「やわらかい」両方に合致する「バナナ」のみを取り出すことは可能でしょうか?

試したこと

条件をorにして検索すると(当たり前ですが)以下のような出力になります。
またandだと複数の値を持つレコードは存在しないため結果は0件になってしまいます。

sql

1select fruit.name, characteristic.name from fruit_characteristic 2 join fruit on fruit_id = fruit.id 3 join characteristic on characteristic_id = characteristic.id 4 where characteristic.name = '甘い' 5 or characteristic.name = '柔らかい'
namename
リンゴ甘い
バナナ甘い
バナナやわらかい
レモンやわらかい

orを用いて検索した結果を、受け取った側でなんらかの処理をして両方の特徴を持つバナナのみを取得するという方法はできなくもなさそうですが、SQLで検索する段階で複数の条件に合致する値のみを取得することはできないでしょうか?
よろしくお願いします。

追記

回答に投稿した通り自己解決しましたが、他にも良い方法や補足等があれば知りたいと思いますのでしばらく回答受付中にしておきます。
よろしくお願いします。

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

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

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

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

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

Orlofsky

2020/07/24 14:29

交差テーブル → 中間テーブル に変更すると適切なコメントが付き易いかと。
tokumei000

2020/07/25 05:49

ご指摘ありがとうございます。中間テーブルという表記を追加いたしました。
guest

回答1

0

自己解決

以下の質問を参考にSQL文を書いてみると目的の値のみを取り出すことができました。
中間テーブルからの検索方法

sql

1select fruit.name from fruit_characteristic 2join fruit on fruit_id = fruit.id 3join characteristic on characteristic_id = characteristic.id 4where characteristic.name in ('甘い', 'やわらかい') 5group by fruit.name 6HAVING count(fruit.name) = 2

投稿2020/07/24 11:42

tokumei000

総合スコア17

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問