2013-07-28 26 views
0

我有兩個表。第一店orders結合SELECT和按不同表中的列進行篩選

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
  • 如何過濾revisions表中name的所有訂單?

回答

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方法會返回一個不確定的)。如果你想更具選擇性,你需要決定選擇哪個結果的標準。