Jeśli dobrze rozumiem Twoje pytanie, products
tabela miałaby domyślną cenę i product_prices
stół miałby inną cenę.
Chcesz wiedzieć, gdzie używana jest cena domyślna, co oznacza, że nie ma innych cen. W tym celu użyj 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
Na podstawie Twojego komentarza przechowujesz ceny domyślne w rekordach z identyfikatorem firmy równym NULL. W tym przypadku wykonałbym dwa sprzężenia z tabelą cen:
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
Pierwsze sprzężenie otrzymuje cenę odpowiadającą podanej cenie. Drugi otrzymuje cenę domyślną. Używany jest pierwszy wynik, jeśli jest obecny, w przeciwnym razie używany jest drugi.