我有两个表,一对多关系,offer和offer_rows
我想通过内容行获取多个优惠。它本身就不难,我只是用
INNER JOIN on offer.offer_id = offer_rows.offer_id
但是,offer_rows表包含一个名为revision的字段,查询需要始终获取具有最高版本号的所有行。这可以通过一个查询来实现吗?
我意识到我可以通过添加名为offer_revision的第三个表来更改数据库设计,我可以使用select条件连接此表以获取最新的修订版号,然后将此表连接到行。然而,这需要相当多的重构,所以我只想做,如果必须的话。
我也希望通过直接查询来执行此操作 - 无存储过程。
答案 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`
)