Pervasive Sql 10 Соединить один стол, на другой, на другой - PullRequest
0 голосов
/ 25 октября 2010

У меня есть таблица с продуктами.
Когда я получаю информацию из этой таблицы, я также хотел бы получить ETA этой статьи.Для этого я планирую получить последнюю строку заказа на покупку, которая находится в этой статье, а затем получить ожидаемую доставку этой покупки.

Это три разных таблицы, и мне бы хотелось, чтобыдругой столбец в запросе, поэтому я могу получить значение из столбца, как если бы оно было в той же таблице.

Возможна ли моя идея?Если по этой статье нет заказа на покупку, я бы хотел, чтобы значение было нулевым.

Продукты

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

Ответы [ 2 ]

0 голосов
/ 25 октября 2010

Использование:

   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.

0 голосов
/ 25 октября 2010

Я не знаю 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
...