行级修订查询MySQL

时间:2010-08-09 09:40:56

标签: mysql select revision

我目前正在为表中的值实现某种版本控制。我在bookingIdrevision之间有一个复合主键。我希望能够从该表中选择所有记录的头部修订版?我不确定我应该做什么。

[bookingDetailsTable]:

  • [ bookingId ]
  • [ revision ]
  • [ name ]
  • 等...

SELECT * from bookingDetailsTable group by bookingId选择第一个版本,但我希望能够为每个预订选择HEAD修订版。

我应该补充一点,我不能做这样的事情因为WHERE只会选择整个表中最高的版本。

SELECT * from bookingDetailsTable where revision = (
                                    select max(revision) from bookingDetailsTable
                                   )
GROUP BY bookingId 

我的当前SELECT

这是我当前的选择,它有三个连接。 REVISION控件仅限于详细信息表。所以我希望连接只使用此表中的最高版本:  module_bookings_bookings_details

SELECT `b`.*, `b`.`id` AS `bookingId`, `d`.*, `c`.*, `p`.* FROM `module_bookings_bookings` AS `b`
 INNER JOIN `module_bookings_bookings_details` AS `d` ON b.id = d.bookingId
 INNER JOIN `module_bookings_clients` AS `c` ON b.clientId = c.id
 LEFT JOIN `module_bookings_property` AS `p` ON d.propertyId = p.id GROUP BY `b`.`id`

1 个答案:

答案 0 :(得分:0)

这是我找到的一个解决方案。

使用自联接查询。

select * from module_bookings_bookings_details as d1 
left join module_bookings_bookings_details as d2 on d1.bookingId = d2.bookingId
      and d1.revision < d2.revision 
where  d2.revision IS NULL

来源:http://dev.mysql.com/doc/refman/5.1/en/example-maximum-column-group-row.html

虽然我不确定如何使用连接进行查询。