sql >> Database >  >> RDS >> Mysql

WHERE voorwaarde probleem in SQL

Ik denk dat je toegang probeert te krijgen tot de validFrom en validTo van de case-query in de waar-voorwaarde. Als dat het geval is, moet u uw zoekopdracht opnieuw formatteren.

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

Maar dit zal 3 resultaten opleveren. Als u het verwachte resultaat wilt krijgen, moet u een AND . gebruiken voorwaarde in plaats van OR .

Dan is uw vraag

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. Groeperen op maand inclusief lege maanden

  2. Hoe de primaire sleutelnaam te specificeren in EF-Code-First

  3. MySQL-fout Te veel verbindingen

  4. Is het mogelijk om kolomgegevens naar beneden te schuiven in een MySQL-tabel?