Полагаю, вы говорите о явных соединениях.Как вы понимаете, объединения просто неявные.Вы бы сделали это так:
SELECT fund.fundname, sum(shares) as tt, (sum(shares)*price.price) as value
FROM trans
JOIN fund
ON ( trans.fundid = fund.fundid )
JOIN customer
ON ( trans.sin = customer.sin )
JOIN price
ON ( price.fundid = trans.fundid )
WHERE trans.transdate = '2009-1-1'
AND price.pricedate = trans.transdate
AND customer.name = 'Jacob'
GROUP BY fund.fundname, price.price;
Postgresql также допускает изящные сокращения с USING
, которые будут включать только одну копию столбца в конечный набор результатов:
SELECT fundname, sum(shares) as tt, (sum(shares)*price.price) as value
FROM trans
JOIN fund
USING ( fundid )
JOIN customer
USING ( sin )
JOIN price
USING ( fundid )
WHERE trans.transdate = '2009-1-1'
AND price.pricedate = trans.transdate
AND customer.name = 'Jacob'
GROUP BY fund.fundname, price.price;