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

Gensidigt eksklusive værdier i SQL

Hvis jeg forstår dit spørgsmål korrekt, er products tabellen ville have standardprisen og product_prices bord ville have en hvilken som helst anden pris.

Du vil gerne vide, hvor standardprisen bliver brugt, hvilket betyder, at der ikke er andre priser. Til dette skal du bruge en 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

Baseret på din kommentar gemmer du standardpriserne i poster med forretnings-id'et NULL. I dette tilfælde ville jeg lave to joins til pristabellen:

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

Den første join får prisen, der matcher den givne pris. Den anden får standardprisen. Det første resultat bruges, hvis det findes, ellers bruges det andet.




  1. Hvordan får jeg kategorien på første niveau til kun at blive vist én gang?

  2. Hvordan trimmer jeg førende og efterfølgende citat fra MySQL Row?

  3. Forståelse af transaktioner i SQL

  4. VALUES-erklæring i MySQL