普适Sql 10将一个表连接到另一个表,再连接到另一个表

普适Sql 10将一个表连接到另一个表,再连接到另一个表,sql,join,pervasive,Sql,Join,Pervasive,我有一张摆放商品的桌子。 当我从那张表中得到信息时,我也想得到那篇文章的预计到达时间。为此,我计划获取本文中最新的采购订单行,然后获取此次采购的预期交付 这是三个不同的表,我希望它像查询中的另一列一样,因此我可以像在同一个表中一样从该列获取值 我的想法可能吗?如果这篇文章没有采购订单,我希望该值为空 产品 样本数据 波罗斯 样本数据 PO 样本数据 所以我想要的结果是: ProductId Price ETA (null if no rows exist) ----------------

我有一张摆放商品的桌子。 当我从那张表中得到信息时,我也想得到那篇文章的预计到达时间。为此,我计划获取本文中最新的采购订单行,然后获取此次采购的预期交付

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

我的想法可能吗?如果这篇文章没有采购订单,我希望该值为空

产品

样本数据

波罗斯

样本数据

PO

样本数据

所以我想要的结果是:

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

我不知道,但在SQL标准中,您可以将最新PO的select设置为别名子查询

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
使用:


普及是我所知道的唯一一个不允许您忽略内部和外部关键字的数据库。v10可能已经放松了这一点,但我知道v8和2000也是如此。

这似乎是可能的,您可以通过任何方式澄清您的表格布局和所需结果吗?@OMG Ponies请查看我的编辑。普遍的10@OMG小马,错过了一个关键的组成部分,现在任何产品,没有相关的POROW将被忽略。顺便说一句,内部和外部关键字可以省略now@OskarKjellin:请看更新,很高兴看到v10允许省略其他数据库也允许的单词。@OMG Ponies:非常感谢@天哪,小马们:我想到了一件事,如果我们有多个PO呢?我们只需要获得最新的预计到达时间。我应该把订单放在哪里?@Oskar Kjellin:见更新,但我没有测试的工具。
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
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
   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