将SELECT和过滤组合在一个不同的表中

时间:2013-07-28 08:01:28

标签: mysql

我有两张桌子。第一个商店orders

id | date | status

第二个表存储revisions(对订单的更改):

name | date | product | producer | etc...

我正在使用此查询显示订单:

SELECT id, date from orders

然后我只使用此查询显示每个订单的最后修订版本:

SELECT name, product, producer from revisions WHERE order_id = id ORDER BY date LIMIT 1

两个问题:

  • 如何将这些组合成一个SELECT
  • 如何根据name表中的revisions过滤所有订单?

1 个答案:

答案 0 :(得分:0)

你想要groupwise maximum

SELECT o.id, o.date,
       r.name, r.product, r.producer
FROM   orders o JOIN (revisions r NATURAL JOIN (
         SELECT   order_id, name, MAX(date) date
         FROM     revisions
         WHERE    name = ?
         GROUP BY order_id
       ) t) ON r.order_id = o.id

请注意,如果单个订单的多个修订版具有revisions.date的相同值,那么它们将全部返回到结果中(而您之前使用LIMIT 1的方法将返回一个不确定的版本) 。如果您想要更具选择性,则需要确定选择要选择哪个结果的标准。