【问题标题】:Mysql join with 5 table or stored procedure/functionMysql加入5个表或存储过程/函数
【发布时间】: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 JOINLEFT JOINMAX
  • 这很简单。查看 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 我试过上面的那个,但它与位置表有重复,因为动物可以在位置中有多个条目

标签: mysql sql


【解决方案1】:

您可以尝试以下查询

select  l.id,l.group_id,l.person_id,l.organization_id,l.fees1,l.fees2,l.fees3,max(l.received_date) as received_date,l.animal_id,p.first_name,aa.address1 from  Organization as o inner join location as l on o.id=l.organization_id left join Person as p on l.person_id=p.id inner join Animal as a on l.animal_id=a.id  inner join Address as aa on o.id=aa.organization_id where o.id=70 limit 1

select  l.id,l.group_id,l.person_id,l.organization_id,l.fees1,l.fees2,l.fees3,l.received_date,l.animal_id,p.first_name,aa.address1 from  Organization as o inner join location as l on o.id=l.organization_id left join Person as p on l.person_id=p.id inner join Animal as a on l.animal_id=a.id  inner join Address as aa on o.id=aa.organization_id where o.id=70  order by l.received_date desc limit 1  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 2018-11-25
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多