有两个表:
表汽车
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年|卡尔
答案 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
的所有内容,然后查找versions
列id_car
列中的所有内容等于id
中的cars
列。哦,只提供作者为versions
的{{1}}中的任何内容,但仅限于汽车年份等于这辆车最棒的一年。“