sql >> Databasteknik >  >> RDS >> Mysql

Villkor i MYSQL where klausul

Du kan göra detta med AND och OR så länge du använder tillräckligt med parentes.

Jag antar också att activities.OrderBy kan vara null. Om så inte är fallet kan du ta bort nollkontrollen:

SELECT activities.*, 
       activitytypes.orderby 
FROM   activities 
       LEFT OUTER JOIN activitytypes 
                    ON activities.typeid = activitytypes.typeid 
WHERE  activities.userid = 86 
       AND activities.typeid NOT IN ( 5, 10, 11, 12, 19 ) 
       AND ( ( activities.orderby = 1 
               AND activities.starttime >= '2013-08-26 04:00:00' 
               AND activities.endtime <= '2013-08-27 04:00:00' ) 
              OR ( ( activities.orderby IS NULL 
                      OR activities.orderby != 1 ) 
                   AND activities.activitydate = '2013-08-26' ) ) 
ORDER  BY activitytypes.orderby, 
          activities.starttime 

Alternativt, om du fortfarande vill använda CASE , du behöver bara stänga ditt CASE uttalande med END , så här:

SELECT          activities.*, 
                activitytypes.orderby 
FROM            activities 
LEFT OUTER JOIN activitytypes 
ON              activities.typeid = activitytypes.typeid 
WHERE           activities.userid = 86 
AND             activities.typeid NOT IN ( 5, 10, 11, 12, 19 ) 
AND             ( 
                  CASE 
                  WHEN activities.orderby = 1 THEN
                    activities.starttime >= '2013-08-26 04:00:00' AND activities.endtime <= '2013-08-27 04:00:00'
                  ELSE
                    activities.activitydate = '2013-08-26' 
                  END
                ) 
ORDER BY        activitytypes.orderby, 
                activities.starttime



  1. Hur väljer man poster från denna relation?

  2. Okänd kolumn i fältlistan

  3. Hur tolkar du en frågas förklara plan?

  4. Normalisera arraysänkningar för 1-dimensionell array så att de börjar med 1