Si j'ai bien compris votre question, les products
table aurait le prix par défaut et les product_prices
table aurait n'importe quel autre prix.
Vous voulez savoir où le prix par défaut est utilisé, ce qui signifie qu'il n'y a pas d'autres prix. Pour cela, utilisez une left outer join
:
SELECT p.*, coalesce(pp.price, p.default_price)
FROM products p LEFT OUTER JOIN
products_prices pp
ON p.id = pp.productId
WHERE pp.price = GIVENPRICE or pp.price is null
D'après votre commentaire, vous stockez les prix par défaut dans des enregistrements avec l'identifiant d'entreprise NULL. Dans ce cas, je ferais deux jointures à la table des prix :
SELECT p.*, coalesce(pp.price, defpp.price)
FROM products p LEFT OUTER JOIN
products_prices pp
ON p.id = pp.productId and pp.price = GIVENPRICE left outer join
products_prices defpp
on p.id = defpp.productId and defpp.businessId is NULL
La première jointure obtient le prix correspondant au prix donné. Le second obtient le prix par défaut. Le premier résultat est utilisé, s'il est présent, sinon le second est utilisé.