私は今レンタルのプロセスを管理するシステムを開発していますが、現在レンタルしている人の名前ですべてのレンタル可能なオブジェクトを効率的に照会する方法オブジェクトが現時点でレンタルされているかどうか。さもなければ、その列にNULLがあるはずです。mysqlデータベースで1:n:1:1の関係に正しく結びついています
私のテーブルは次のようになります。
オブジェクト
| object_id | object_name |
---------------------------
| 1 | Object A |
| 2 | Object B |
| 3 | Object C |
| 4 | Object D |
| 5 | Object E |
---------------------------
人
| person_id | person_name |
---------------------------
| 1 | John Doe |
| 2 | Jane Doe |
| 3 | Max Muster |
| 4 | Foobar |
---------------------------
レンタル
| rental_id | rental_state| person_person_id |
----------------------------------------------
| 1 | open | 1 |
| 2 | returned | 1 |
| 3 | returned | 2 |
| 4 | open | 3 |
| 5 | returned | 4 |
----------------------------------------------
rental2object
| rental_rental_id | object_object_id |
---------------------------------------
| 1 | 1 |
| 2 | 2 |
| 2 | 3 |
| 3 | 3 |
| 4 | 2 |
| 4 | 5 |
| 5 | 2 |
---------------------------------------
私が望む結果は次のようになります。
| object_id | object_name | rented_to |
-------------------------------------------
| 1 | Object A | John Doe |
| 2 | Object B | Max Muster |
| 3 | Object C | NULL |
| 4 | Object D | NULL |
| 5 | Object E | Max Muster |
-------------------------------------------
私がこれまで持っていることは次のとおりです。
SELECT `object_id`, `object_name`, `person_name` FROM `object`
LEFT JOIN `rental2object` ON `object_id` = `object_object_id`
LEFT JOIN `rental` ON `rental_id` = `rental_rental_id` AND `rental_state` = 'open'
LEFT JOIN `person` ON `person_id` = `person_person_id`
GROUP BY `object_id`
明白な問題ですグループ化している間に正しい方法を集める方法がわかりません。
私の目標を達成する最も効率的な方法は何でしょうか?あなたの助けに感謝。
EDIT
そのオブジェクトBはまた、最大ムスターにレンタルされているように、期待される結果を修正。
をお試しください'SELECT'文中の' GROUP BY'には存在しない列です。 – ydoow
オブジェクト#2と#5は両方ともレンタル#4にあります。しかし、あなたは期待どおりの結果を得るためには、両方の方法で処理します。オブジェクトEとオブジェクトBは、どちらも同じ動作でなければならず、両方とも関連していますMax Muster、それはありませんか?なぜオブジェクトBにNull related_to personがあるのですか? – danihp
あなたの編集を確認してから、私の答えをチェックし、いくつかのmuggleから投票しました。理由はわかりません。ところで – danihp