Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Sich gegenseitig ausschließende Werte in SQL

Wenn ich Ihre Frage richtig verstehe, die products Tabelle hätte den Standardpreis und die product_prices Tisch hätte jeden anderen Preis.

Sie möchten wissen, wo der Standardpreis verwendet wird, was bedeutet, dass es keine anderen Preise gibt. Verwenden Sie dazu einen 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

Basierend auf Ihrem Kommentar speichern Sie die Standardpreise in Datensätzen, wobei die Geschäfts-ID NULL ist. In diesem Fall würde ich zwei Verknüpfungen mit der Preistabelle vornehmen:

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

Der erste Join erhält den Preis, der dem angegebenen Preis entspricht. Der zweite erhält den Standardpreis. Das erste Ergebnis wird verwendet, falls vorhanden, andernfalls wird das zweite verwendet.