1

現在、テーブル内の値に対してある種のバージョン管理を実装しています。と の間に複合主キーがbookingIdありrevisionます。このテーブルから、ヘッド リビジョンであるすべてのレコードを選択できるようにしたいですか? 私は何をすべきかわかりません。

[ bookingDetailsTable] :

  • [予約ID ]
  • リビジョン
  • 【お名前
  • 等...

SELECT * from bookingDetailsTable group by bookingId最初のリビジョンを選択しますが、予約ごとに HEAD リビジョンを選択できるようにしたいと考えています。

WHERE はテーブル全体で最も高いリビジョンのみを選択するため、このようなことはできないことを付け加えておきます。

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

私の現在のSELECT

これが私の現在の選択で、3 つの結合があります。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`
4

1 に答える 1

0

これが私が見つけた1つの解決策です。

自己結合を使用してクエリを実行します。

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

結合を使用してそのクエリを実行する方法はわかりませんが。

于 2010-08-09T10:49:19.640 に答える