Запросы на пересмотр уровня строки MySQL - PullRequest
1 голос
/ 09 августа 2010

В настоящее время я реализую какой-то контроль версий для значений в таблице. У меня есть составной первичный ключ от bookingId до revision. Я хочу иметь возможность выбрать все записи из этой таблицы, которые являются основной ревизией? Я не уверен, что я должен делать.

[bookingDetailsTable]:

  • [ bookingId ]
  • [ редакция ]
  • [ имя ]
  • и т.д ...

SELECT * from bookingDetailsTable group by bookingId выбирает первую ревизию, однако я хочу иметь возможность выбрать ревизию HEAD для каждого бронирования.

Я должен добавить, что я не могу сделать что-то подобное, потому что ГДЕ будет выбирать только ревизии, которые являются самыми высокими во всей таблице.

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

Мой текущий выбор

Вот мой текущий выбор, он состоит из трех соединений. Элемент управления 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 голосов
/ 09 августа 2010

Вот одно решение, которое я нашел.

Запрос с использованием самостоятельного соединения.

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

Хотя я не уверен, как выполнить этот запрос с помощью объединения.

...