지금 렌탈 프로세스를 관리하는 시스템을 개발 중이며 현재 빌려 오는 사람 이름으로 모든 렌털 가능 오브젝트를 효율적으로 쿼리하는 방법이 궁금합니다. 객체가 현재 대여되어있는 경우 그렇지 않으면 해당 열에 NULL이 있어야합니다.mysql 데이터베이스에서 1 : n : 1 : 1 릴레이션에 올바르게 연결하십시오.
내 표는 다음과 같다 :
객체
| person_id | person_name |
---------------------------
| 1 | John Doe |
| 2 | Jane Doe |
| 3 | Max Muster |
| 4 | Foobar |
---------------------------
임대
| object_id | object_name |
---------------------------
| 1 | Object A |
| 2 | Object B |
| 3 | Object C |
| 4 | Object D |
| 5 | Object E |
---------------------------
사람
rental2object
| rental_rental_id | object_object_id |
---------------------------------------
| 1 | 1 |
| 2 | 2 |
| 2 | 3 |
| 3 | 3 |
| 4 | 2 |
| 4 | 5 |
| 5 | 2 |
---------------------------------------
I는 다음과 같이해야 원하는 결과 :
| 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`
명백한 문제가 그룹화하는 동안 올바른 방법을 모으는 방법을 알지 못합니다.
내 목표를 달성하는 가장 효율적인 방법은 무엇입니까? 당신의 도움을 주셔서 감사합니다.
편집
그 개체 B는 또한 최대 소집에 임대되어 있으므로, 예상 된 결과가 수정되었습니다. 귀하의 질문에 대해
을 시도 person_id로 (다음 인덱스가 암시 적 기본 키입니다) : & rental_state (두 필드와 종합 지수)
개체 # 2와 # 5는 모두 임대 # 4에 있습니다. 그러나 당신은 당신의 예상 된 결과에 대해 서로 다른 방식으로 처리합니다. 객체 E와 객체 B는 모두 둘 다 동일한 동작이어야합니다. 둘 다 관련이 있습니다. 왜 객체 B가 사람과 관련이있는 Null을 가졌습니까? – danihp
좋아, 내가 편집 한 것을보고 내 대답을 확인하고, 왜 그 이유를 모르겠다. – danihp