Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Valores mutuamente exclusivos em SQL


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.