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

WHERE-Bedingungsproblem in SQL

Ich denke, Sie versuchen, auf validFrom zuzugreifen und validTo aus der case-Abfrage in der where-Bedingung. Wenn dies der Fall ist, müssen Sie Ihre Abfrage neu formatieren.

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

Aber dies wird 3 Ergebnisse zurückgeben. Wenn Sie das erwartete Ergebnis erhalten möchten, müssen Sie ein AND verwenden Bedingung statt OR .

Dann lautet Ihre Abfrage

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