0

我有一张放着产品的桌子。
当我从该表中获取信息时,我还想获取该文章的 ETA。为此,我计划获取最新的采购订单行,即本文中的内容,然后获取此采购的预期交付。

这是三个不同的表,我希望它像查询中的另一列,所以我可以从列中获取值,就像它在同一个表上一样。

我的想法可行吗?如果本文没有采购订单,我希望该值为空。

产品

Int ProductId
Int Price

样本数据

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

POrows

Int RowId
Int ProductId
Int POId

样本数据

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

采购订单

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
4

2 回答 2

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

Pervasive 是我知道的唯一一个不允许您省略 INNER 和 OUTER 关键字的数据库。v10 可能已经放松了这一点,但我知道 v8 和 2000 就是这种情况。

于 2010-10-25T19:15:19.683 回答
0

我不知道 Pervasive 但在 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
于 2010-10-25T17:28:15.630 回答