如何在一次查询中从两个表中获取记录

3

我有两个表

  1. rental_detail -> [ id, Building, Floor, Flate_no, Name,doj]

rental_detail 存储人员信息。
这是 rental_detail

|id|name|building|Floor|Flate_no|doj |1 |aana| C | 1st |c-101 |06-12-2015

另外一个表为

  1. Monthly_rent -> [ id, Building, Floor, Flate_no, date ] 存储每个月人员支付的租金详细信息

这是 month_rent

|id|building|Floor|Flate_no|date |rent| |1 | C | 1st |c-101 |02-01-2016|2000 |2 | C | 1st |c-101 |03-02-2016|2000 |1 | C | 1st |c-101 |06-12-2015|2000

我需要从 Monthly_rent 表中获取最大的日期,并且从 rental_detail 表中获取所有建筑为 c、楼层为 1st、房间为 c-101 的人员信息。

我尝试了以下查询:

select *,max(mr.date) as m 
from monthly_rent mr 
Inner join rental_details rd 
   on rd.building='C' and rd.floor = '1st' And rd.flate_no='C-101

我需要这个

|1|aana|C|1st|c-101|03-02-2016|

aana在03-02-2016支付了最后一笔租金


你会得到什么输出? - Pruthviraj Chudasama
从 monthlyrent 中查找 Building 为 c,floor 为 1st,flate 为 c-101 的最大日期。 - Aanal Shah
当您有简单的查询时,请不要执行不必要的JOIN操作。只需匹配两个表相关的唯一ID即可。 - Malarivtan
如果两个表中都没有外键,你如何执行连接操作? - marklong
在展台表格构建中,floor和flate_no是相同的。 - Aanal Shah
显示剩余3条评论
3个回答

2

试试这个:

SELECT rd .*,mr.date AS mr_date  
FROM rental_details rd 
LEFT JOIN monthly_rent mr 
ON rd.date = (SELECT MAX(date) FROM monthly_rent WHERE building='C' )
WHERE rd.building='C' AND rd.floor = '1st' AND rd.flate_no='C-101'

0

试试这个:

select *, max(mr.date) as m 
from monthly_rent mr, rental_details rd
where mr.id = rd.id 
and rd.building='C' 
and rd.floor = '1st' 
and rd.flate_no='C-101'

这应该可以运行...


从rentat_detail表中获取最大日期。 - Aanal Shah
是的!因为您要求,将其更改为rd.date。 - Malarivtan
它显示两个表中的常见日期。 - Aanal Shah
1
是的,我正在使用MySQL,是的,我指定了日期,但它仍然采用常见的日期格式。 - Aanal Shah
或者如果您不想更改表结构,那么请尝试使用MAX(STR_TO_DATE('mr.date','YOUR-DATE-FORMAT'))。如果日期格式为m-d-Y,则使用%m-%d-%Y。 - Pallavi
显示剩余6条评论

0

试试这样,应该会有帮助..

select rd.*,max(mr.date) as m 
from monthly_rent as mr 
LEFT join rental_details as rd ON mr.building = rd.building
WHERE rd.floor = '1st' and rd.flate_no='C-101'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接