Mysql
 sql >> Base de données >  >> RDS >> Mysql

Valeurs mutuellement exclusives en SQL

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é.