Mysql
 sql >> Database >  >> RDS >> Mysql

Valori mutualmente esclusivi in ​​SQL

Se ho capito correttamente la tua domanda, i products table avrebbe il prezzo predefinito e il product_prices tavolo avrebbe qualsiasi altro prezzo.

Vuoi sapere dove viene utilizzato il prezzo predefinito, il che significa che non ci sono altri prezzi. Per questo, usa un 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

In base al tuo commento, stai memorizzando i prezzi predefiniti nei record con l'ID attività NULL. In questo caso, farei due join alla tabella dei prezzi:

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

Il primo join ottiene il prezzo corrispondente al prezzo indicato. Il secondo ottiene il prezzo predefinito. Viene utilizzato il primo risultato, se presente, altrimenti viene utilizzato il secondo.