Pervasive Sql 10 Соединить один стол, на другой, на другой
У меня есть стол с продуктами.
Когда я получаю информацию из этой таблицы, я также хотел бы получить 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
2 ответа
Использование:
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.
Я не знаю 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