実現したいこと
中間テーブル(交差テーブル)を用いてDBを構築したときに、複数の特徴に合致する値を取り出したいと考えています。
例えば果物が以下のような複数の特徴を持っており、これを交差テーブルを用いて構築したとします。
- リンゴ(甘い、かたい)
- バナナ(甘い、やわらかい)
- レモン(甘い、すっぱい)
fruit(果物テーブル)
id | name | price |
---|---|---|
1 | リンゴ | 100 |
2 | バナナ | 120 |
3 | レモン | 130 |
characteristic(特徴テーブル)
id | name |
---|---|
1 | 甘い |
2 | すっぱい |
3 | やわらかい |
4 | かたい |
fruit_characteristic(交差テーブル)
id | fruit_id | characteristic_id |
---|---|---|
1 | 1 | 1 |
2 | 1 | 4 |
3 | 2 | 1 |
4 | 2 | 3 |
5 | 3 | 2 |
6 | 3 | 3 |
このような状況において「甘い」「やわらかい」両方に合致する「バナナ」のみを取り出すことは可能でしょうか?
試したこと
条件を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 = '柔らかい'
name | name |
---|---|
リンゴ | 甘い |
バナナ | 甘い |
バナナ | やわらかい |
レモン | やわらかい |
orを用いて検索した結果を、受け取った側でなんらかの処理をして両方の特徴を持つバナナのみを取得するという方法はできなくもなさそうですが、SQLで検索する段階で複数の条件に合致する値のみを取得することはできないでしょうか?
よろしくお願いします。
追記
回答に投稿した通り自己解決しましたが、他にも良い方法や補足等があれば知りたいと思いますのでしばらく回答受付中にしておきます。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー