2010-10-25 103 views
0

我有一個產品表。
當我從該表中獲得信息時,我還想獲得該文章的ETA。爲此,我計劃獲得最新的Order Row訂單,即本文中的內容,然後獲得此購買的預期交付。Pervasive Sql 10加入一個表,到另一個,到另一個

這是三個不同的表,我希望它像查詢中的另一列,所以我可以像列表中的值那樣從列中獲取值。

我的想法可能嗎?如果這篇文章沒有采購訂單,我希望該值爲空。

產品

Int ProductId 
Int Price 

的樣本數據

ProductId Price 
----------------- 
1   100 
2   300 

PORows

Int RowId 
Int ProductId 
Int POId 

的樣本數據

RowId ProductId POId 
----------------------- 
1  1   1 

PO

Int POId 
DateTime ETA 

的樣本數據

POId ETA 
----------------------- 
1  2010-10-25 10:05 

所以結果我希望是:

ProductId Price ETA (null if no rows exist) 
------------------------------------------------ 
1   100 2010-10-25 10:05 
2   300 NULL 
+0

這似乎是可能的,任何方式,你可以澄清你的表格佈局和預期的結果? – Orbit 2010-10-25 17:18:26

+0

@OMG小馬請參閱我的編輯。普遍10 – 2010-10-25 18:41:14

回答

0

用途:

SELECT p.productid, 
      p.price, 
      x.max_eta 
    FROM PRODUCTS p 
LEFT JOIN POROWS r ON r.productid = p.productid 
LEFT JOIN (SELECT po.id, 
        MAX(po.eta) AS max_eta 
      FROM PO po 
     GROUP BY po.id) x ON x.poid = r.poid 

普適是我知道的唯一數據庫這將不會允許您省略INNER和OUTER關鍵字。 v10可能放寬了這一點,但我知道這是v8和2000.

+0

@OMG小馬,錯過了其中一個關鍵組件,現在任何沒有關聯POROW的產品都將被忽略。順便說一句INNER和OUTER關鍵字現在可以省略 – 2010-10-25 19:29:27

+0

@Oskar Kjellin:看到更新,很高興看到V10允許省略其他DB允許的單詞。 – 2010-10-25 19:31:47

+0

@OMG小馬:非常感謝! – 2010-10-25 19:33:49

0

我不知道普適但在SQL標準你可以選擇最新的PO的別名的子查詢

select Products.id, products.name, ProductETAS.ETA 
from Products 
left join 

( 
    select POLINES.productid, min(PO.ETA) as ETA from PO inner join POLINES 
    on PO.id = POLINES.POid and POLINES.productid = ? 
    where PO.ETA >= today 
    group by POLINES.productid 
) as ProductETAS 

on Products.productid = ProductETAS.productid