sql >> Database >  >> RDS >> Mysql

Wederzijds uitsluitende waarden in SQL

Als ik uw vraag goed begrijp, de products tabel zou de standaardprijs en de product_prices . hebben tafel zou een andere prijs hebben.

U wilt weten waar de standaardprijs wordt gebruikt, wat betekent dat er geen andere prijzen zijn. Gebruik hiervoor een 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

Op basis van uw opmerking slaat u de standaardprijzen op in records met als bedrijfs-ID NULL. In dit geval zou ik twee keer meedoen aan de prijstabel:

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

De eerste join krijgt de prijs die overeenkomt met de opgegeven prijs. De tweede krijgt de standaardprijs. Het eerste resultaat wordt gebruikt, indien aanwezig, anders wordt het tweede gebruikt.




  1. Waarom kan NULL in SQL niet overeenkomen met NULL?

  2. De beste manier om records te tellen met willekeurige tijdsintervallen in Rails+Postgres

  3. Rijen met dezelfde kolomwaarden retourneren in MySql

  4. laravel retourneert json-tekenreeks op lokale machine, maar geheel getal op elastische bonenstaakinstantie