【发布时间】:2018-08-28 14:17:00
【问题描述】:
我需要加入 4 个表:Location、Animal、Person、Organization 和 Address。
输入将是组 id 即 70
要求:
- 根据接收日期获取动物的最新位置。
- 从动物表中获取动物名称。
如果有该动物的 person_id,在 location 表中,从 Person 表和地址信息中获取人的名字和姓氏。
如果 location 中有组织 ID,则获取组织名称和地址 来自组织表和地址表。
对于给定的组织 id 为 70,我如何在一个查询中加入这 5 个表:
带有数据的示例表结构:
餐桌位置
id | group_id | person_id | organization_id | fees1 |fees2 |fees3| received_date |animal_id |
23| 70 | 12 | 0 | 10 |10 |0 | 2017-11-11 | 1 |
24| 70 | 1 | 0 | 10 |10 |0 | 2017-10-11 | 1 |
餐桌动物
id| animal_name |group_id|
1 | demo | 22 | 70
桌人
id | first_name | last_name |
1 | Sam | Dam |
表格组织
id | org_name |
77 | test_org |
表地址
id | organization_id | person_id | address1 | country|
45 | 0 | 1 | test address| USA |
group_id 70 的预期输出
输出:
location.id | location.group_id | location.person_id | location.organization_id | fees1 |fees2 |fees3| received_date | animal_id | animal_name | first_name |address1 |
23 | 70 | 1 | 70 | 20 |20 |20 | 2017-11-11 | 1 | demo | Sam | test address |
【问题讨论】:
-
到目前为止您尝试过什么?你在哪里遇到困难?
-
对于一些提示,您需要查看
INNER JOIN、LEFT JOIN和MAX。 -
这很简单。查看 MySQL 开发者网站上的加入文档。
-
任何时候你发现自己有枚举列,警钟应该开始响起
-
选择 a.id, a.name, a.species, a.group_animal_id, l.date_in,l.cmets,l.action_min,l.adoption_fee,l.supplies,l.boarding,l .training,l.person_id , p.first_name, p.last_name, l.organization_id , org.org_name from location l left join animal a on l.animal_id=a.id left join organization org on l.organization_id = org.id left join person p on l.person_id = p.id where l.group_id = 70 order by l.date_in 我试过上面的那个,但它与位置表有重复,因为动物可以在位置中有多个条目