来自2个表的数据

时间:2012-01-05 16:00:58

标签: mysql sql database

有两个表:

汽车

id | date
----------
1 | 2012-01-04
2 | 2012-01-04
3 | 2012-01-05

版本

id_car | year | author
-------------------------
1 | 2005 | John
1 | 2001 | Carl

2 | 2003 | Carl
2 | 2001 | John

3 | 2004 | Carl
3 | 2003 | John

如果作者是卡尔,我需要在昨天的日期(2012-01-04)获取有关汽车的所有信息,并提供有关其最新版本的信息。

所以在这个例子中我需要得到: 2 | 2012-01-04 | 2003年|卡尔

1 个答案:

答案 0 :(得分:5)

您需要inner join

select
    c.id,
    c.date,
    v.year,
    v.author
from
   cars c
   inner join versions v on
       c.id = v.id_car
   inner join (
        select 
            id_car, 
            max(year) as latestYear 
        from 
            versions 
        group by 
            id_car
    ) vmax on
       c.id = vmax.id_car
       and v.year = vmax.latestYear
where
   v.author = 'Carl'
   and c.date = '2012-01-04'

在此查询中,您说,“抓住cars日期为2012-01-04的所有内容,然后查找versionsid_car列中的所有内容等于id中的cars列。哦,只提供作者为versions的{​​{1}}中的任何内容,但仅限于汽车年份等于这辆车最棒的一年。“