2016-08-17 10 views
0

したがって、次のwhereステートメントで照会します。基本的に、私は過去7日間にスポーツやプレーヤーの活動がなかったことを確認したいと思います。 NULL値がある場合にwhereステートメント(SQL)のNULL値を扱う

WHERE...... 
AND (((SELECT max(sportswagerbyleague.asOfDate) 
      FROM sportswagerbyleague 
      WHERE sportswagerbyleague.userID = customer_profile.userID) 
       <= date(CURDATE()) - INTERVAL 7 DAY ) 
       AND ((SELECT max(pa.txndate) 
        FROM player_activity pa 
        WHERE pa.userID = customer_profile.userID) <= date(CURDATE()) - INTERVAL 7 DAY)) 

しかし、(そのユーザ別名が全くプレーヤーの活動やスポーツ活動を持っていないのいずれか)、その後、WHERE文では、その特定のユーザのための偽となります。私はWHEREステートメントが単一のNULL値であっても真のままであるようにしたい。

提案?

答えて

0

NULL値との比較は常にfalseであるため、そのケースを別々に処理する必要があります。あなたはその目的のためにIS NULLのようなものを使うことができます。代わりにNOT EXISTS

0

スイッチ3値ロジックを避けるために:

WHERE...... 
AND NOT EXISTS 
(SELECT * 
    FROM sportswagerbyleague 
    WHERE sportswagerbyleague.userID = customer_profile.userID 
    AND sportswagerbyleague.asOfDate > date(CURDATE()) - INTERVAL 7 DAY 
) 
AND NOT EXISTS 
(
    SELECT *max(pa.txndate) 
    FROM player_activity pa 
    WHERE pa.userID = customer_profile.userID 
    AND pa.txndate > date(CURDATE()) - INTERVAL 7 DAY 
) 
+0

それは「*」の代わりに「MAX(sportswagerbyleague.asOfDate)」のであるか、それだけでタイプミスでない理由? – eddd83

+0

型なし、 'max(sportswagerbyleague.asOfDate)'のような集約は常に行を返します(一致する行がない場合は 'NULL')ので、' NOT EXISTS'は決してtrueになりません。 '[NOT] EXISTS'は' * 'が実際に推奨される唯一の場所です:-) – dnoeth

関連する問題