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

Problem z warunkiem WHERE w SQL

Myślę, że próbujesz uzyskać dostęp do validFrom i validTo z zapytania case w warunku where. W takim przypadku należy ponownie sformatować zapytanie.

SELECT t1.* FROM ( SELECT mPrice, aPrice, 
CASE 
    WHEN validFrom < '2013-11-01' 
        THEN '2013-11-01' 
    ELSE validFrom END AS validFrom, 

CASE 
    WHEN validTo > '2013-11-30' 
        THEN '2013-11-30' 
    ELSE validTo END AS validTo 

FROM commission) t1 

WHERE ((t1.validfrom BETWEEN '2013-11-01' AND '2013-11-30') OR (t1.validto BETWEEN '2013-11-01' AND '2013-11-30')) ORDER BY t1.validFrom

Ale to zwróci 3 wyniki. Jeśli chcesz uzyskać oczekiwany wynik, musisz użyć AND warunek zamiast OR .

Wtedy Twoje zapytanie będzie

SELECT t1.* FROM ( SELECT mPrice, aPrice, 
CASE 
    WHEN validFrom < '2013-11-01' 
        THEN '2013-11-01' 
    ELSE validFrom END AS validFrom, 

CASE 
    WHEN validTo > '2013-11-30' 
        THEN '2013-11-30' 
    ELSE validTo END AS validTo 

FROM commission) t1 

WHERE ((t1.validfrom BETWEEN '2013-11-01' AND '2013-11-30') AND (t1.validto BETWEEN '2013-11-01' AND '2013-11-30')) ORDER BY t1.validFrom


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Synchroniczny mysql w Node.js

  2. Odkażanie parametrów użytkownika MySQL

  3. Jaki jest sens NOT NULL DEFAULT '' ?

  4. Wybór wielu tabel a JOIN (wydajność)

  5. Używanie „LIKE” z wynikiem podzapytania SQL