Se entendi sua pergunta corretamente, os
products
tabela teria o preço padrão e os product_prices
mesa teria qualquer outro preço. Você quer saber onde o preço padrão está sendo usado, o que significa que não há outros preços. Para isso, use uma
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
Com base em seu comentário, você está armazenando os preços padrão em registros com o ID da empresa sendo NULL. Nesse caso, eu faria duas junções na tabela de preços:
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
A primeira junção obtém o preço correspondente ao preço fornecido. O segundo recebe o preço padrão. O primeiro resultado é usado, se presente, caso contrário, o segundo é usado.