sql >> データベース >  >> RDS >> Mysql

MYSQLwhere句の条件付き

    これはANDで行うことができます およびOR 十分な括弧を使用している限り。

    また、activities.OrderBy nullにすることができます。そうでない場合は、ヌルチェックを削除できます:

    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 
    

    または、それでもCASEを使用する場合 、CASEを閉じる必要があります ENDを使用したステートメント 、このように:

    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. データベースの構造/設計

    2. UTC_DATEの例– MySQL

    3. JDBCを使用してファイルからPostgreSQLにデータをコピーする方法は?

    4. 日付を含む、Oracleの2つの日付間の日数を取得します