MySQL の知識と、データベース内のいくつかの異なるテーブル間で関係がどのように機能するかについての知識を深めようとしています。主キーと外部キー、およびそれらがテーブル内でどのように機能するかを理解しています。
私が持っているのは、私がいっぱい遊んでいるテストデータベースとpeople
、hats
さまざまな帽子と人々の関係です。これまでにテストデータベースにあるものは次のとおりです。
| Tables_in_test |
+-----------------+
| hats |
| hats_collection |
| people |
+-----------------+
私people
のテーブルは次のようになります。
+-----------+---------+
| person_id | fname |
+-----------+---------+
| 1 | Sethen |
| 2 | Michael |
| 3 | Jazmine |
+-----------+---------+
私hats
のテーブルは次のようになります。
+--------+----------+
| hat_id | hat |
+--------+----------+
| 1 | Awesome |
| 2 | Kick Ass |
| 3 | Bowler |
| 4 | Fedora |
+--------+----------+
最後に、私のhats_collection
テーブルは次のようになります。
+-----------+--------+
| person_id | hat_id |
+-----------+--------+
| 2 | 1 |
| 2 | 4 |
| 3 | 2 |
+-----------+--------+
基本的に、私は hats テーブルに存在する可能性のあるさまざまな帽子をすべて格納し、 と を使用hats_collection
するだけのテーブルでさまざまな人々との関係を保持しています。person_id
hat_id
これらすべてのテーブルを正しく設定してデータを挿入する方法は確かですが、hats_collection
テーブルからデータを表示してユーザー名とその帽子を表示するクエリを作成する方法がわかりません。
これが私がこれまでに持っているものです:
SELECT people.fname, hats.hat
FROM people
INNER JOIN hats
INNER JOIN hats_collection
ON hats_collection.person_id = people.person_id AND hats_collection.hat_id = hats.hat_id
WHERE people.person_id = 1;
これは空のセットを返しています。
私の質問は次のとおりです。
- どの人がどの帽子をかぶっているという正しい結果を得るには、クエリをどのように変更すればよいでしょうか?
- これは、このようなもののためにテーブルをセットアップする方法ですか? もっと簡単/効率的な方法はありますか?
編集
申し訳ありませんが、投稿したクエリは機能します。ID が 1 の人は帽子をかぶっていないため、空のセットが返されていましたが、これにより新しい質問が発生しました。
- これは、このクエリを記述する最良の方法ですか?
これを行うための最も効率的な方法についての私の質問はまだ残っています。