sql >> Database >  >> RDS >> Mysql

Voorwaardelijk in MYSQL waar clausule

U kunt dit doen met AND en OR zolang je voldoende haakjes gebruikt.

Ook ga ik ervan uit dat activities.OrderBy nul kan zijn. Als dat niet het geval is, kunt u de nulcontrole verwijderen:

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 

Als alternatief, als u nog steeds CASE wilt gebruiken , je hoeft alleen je CASE te sluiten statement met END , zoals dit:

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. T-SQL - Aliasing met =versus as

  2. Waarom stopt de MySQL Unix-tijd voor de 32-bits niet-ondertekende integer-limiet?

  3. DISTINCT voor slechts één kolom

  4. IBM DB2 verbinden met IRI-software