这可能在一个mysql查询中吗?

时间:2012-11-13 10:42:22

标签: mysql

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

我想通过内容行获取多个优惠。它本身就不难,我只是用

 INNER JOIN on offer.offer_id = offer_rows.offer_id

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

我意识到我可以通过添加名为offer_revision的第三个表来更改数据库设计,我可以使用select条件连接此表以获取最新的修订版号,然后将此表连接到行。然而,这需要相当多的重构,所以我只想做,如果必须的话。

我也希望通过直接查询来执行此操作 - 无存储过程。

3 个答案:

答案 0 :(得分: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
  ) 

答案 1 :(得分:1)

您可以使用MAX(revision)选择offer_rows中的所有行,然后选择商品表JOIN(不需要嵌套查询):

SELECT *, MAX(revision) as latest_revision
FROM offer_rows or
INNER JOIN offer o USING( offer_id )
GROUP BY offer_id

答案 2 :(得分:0)

是的,只需一次查询即可。您可以使用子查询获得WHERE子句中的最高版本。

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

AND `outer`.`version` = (
    SELECT MAX( `inner`.`version` )
    FROM `content` `inner`
    WHERE `inner`.`id` = `outer`.`id`
    AND `inner`.`language` = `outer`.`language`
)