Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wzajemnie wykluczające się wartości w SQL

Jeśli dobrze rozumiem Twoje pytanie, products tabela miałaby domyślną cenę i product_prices stół miałby inną cenę.

Chcesz wiedzieć, gdzie używana jest cena domyślna, co oznacza, że ​​nie ma innych cen. W tym celu użyj 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 podstawie Twojego komentarza przechowujesz ceny domyślne w rekordach z identyfikatorem firmy równym NULL. W tym przypadku wykonałbym dwa sprzężenia z tabelą 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

Pierwsze sprzężenie otrzymuje cenę odpowiadającą podanej cenie. Drugi otrzymuje cenę domyślną. Używany jest pierwszy wynik, jeśli jest obecny, w przeciwnym razie używany jest drugi.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak ograniczyć zapytanie SHOW TABLES?

  2. Jak mogę zresetować domyślne zachowanie użytkownika root w MySQL 5.7?

  3. Filtruj wyniki według daty w polu znacznika czasu

  4. Czyszczenie pola numerów telefonów w mySql

  5. Hibernacja strategii nazewnictwa zmieniającej nazwy tabel