sql >> Databáze >  >> RDS >> Mysql

Vzájemně se vylučující hodnoty v SQL

Pokud správně rozumím vaší otázce, products tabulka bude mít výchozí cenu a product_prices stůl by měl jinou cenu.

Chcete vědět, kde se používá výchozí cena, což znamená, že neexistují žádné jiné ceny. K tomu použijte 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

Na základě vašeho komentáře ukládáte výchozí ceny do záznamů s ID firmy NULL. V tomto případě bych provedl dvě připojení k tabulce cen:

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

První spojení získá cenu odpovídající dané ceně. Druhý dostane výchozí cenu. Použije se první výsledek, pokud existuje, jinak se použije druhý.




  1. jak emulovat insert ignore a na duplicitní aktualizaci klíče (sql merge) s postgresql?

  2. 400 SELECT dotazů k naplnění php mřížky

  3. Použití replikačních slotů PostgreSQL

  4. mysql | Požadavek z prázdného sloupce a FIND_IN_SET