0

我有两个具有一对多关系的表,offer 和 offer_rows

我想用它们的内容行获取多个报价。这本身并不难,我只是使用

 INNER JOIN on offer.offer_id = offer_rows.offer_id

但是,offer_rows 表包含一个名为 revision 的字段,并且查询需要始终获取具有最高修订号的所有行。这可以通过单个查询来实现吗?

我意识到我可以更改数据库设计,通过添加第三个名为 offer_revision 的表,我可以使用选择条件加入该表以获取最新的修订号,然后将该表连接到行。然而,这需要大量的重构,所以我只想在必要时这样做。

我也想通过直接查询来做到这一点 - 没有存储过程。

4

3 回答 3

2

当然有可能:

SELECT o.*, r.revision, r.something_else
FROM offer o,
     offer_rows r
WHERE o.offer_id = r.offer_id
  AND r.revision = (
    SELECT max(revision)
    FROM offer_rows
    WHERE offer_id = o.offer_id
  ) 
于 2012-11-13T10:50:44.040 回答
1

您可以从 offer_rows 中选择所有行MAX(revision),然后JOIN选择 offer 表(不需要嵌套查询):

SELECT *, MAX(revision) as latest_revision
FROM offer_rows or
INNER JOIN offer o USING( offer_id )
GROUP BY offer_id
于 2012-11-13T11:00:29.563 回答
0

是的,这可以通过单个查询来实现。您可以有一个子查询,该子查询获得WHERE子句中的最高版本。

我使用以下比较来获取最新版本条目:

AND `outer`.`version` = (
    SELECT MAX( `inner`.`version` )
    FROM `content` `inner`
    WHERE `inner`.`id` = `outer`.`id`
    AND `inner`.`language` = `outer`.`language`
)
于 2012-11-13T10:48:28.873 回答