sql >> Base de Datos >  >> RDS >> Mysql

Valores mutuamente excluyentes en SQL

Si entiendo bien su pregunta, los products la tabla tendría el precio predeterminado y los product_prices mesa tendría cualquier otro precio.

Desea saber dónde se utiliza el precio predeterminado, lo que significa que no hay otros precios. Para esto, use una 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

Según su comentario, está almacenando los precios predeterminados en registros con la identificación comercial NULL. En este caso, haría dos uniones a la tabla de precios:

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 primera unión obtiene el precio que coincide con el precio dado. El segundo obtiene el precio predeterminado. Se utiliza el primer resultado, si está presente; de ​​lo contrario, se utiliza el segundo.