プログラマ38の日記

主にプログラムメモです。

Salesforce/SQL: 検索条件でのnullの扱いの違いについて

Salesforceではデータの取得でSOQLを使います。
一般的なRDBSQLと似ていますが、結合処理や、検索の指定がSQLと異なります。

検索条件でのnullの指定と検索結果について、SOQLとSQLの違いがあるのでメモです。

 

次のデータをサンプルとしてSOQLとSQLで検索結果の違いを見ていこうと思います。

# 項目 備考
1 valueA  
2 valueB  
3   null値です。
4 valueC  

 

nullの条件の指定 

SOQLのnullの条件は、 「項目 = null」 または 「項目 = ''」 です。
Salesforceには空文字でデータ登録はできないのでSOQLでは、nullと空文字で区別はありません。
※Apexではnullと空文字は異なります。
「項目 = null」の条件に対して結果は次です。

# 項目 備考
3   null値です。

 

SQLのnullの条件は「項目 is null」です。この条件での結果は次です。

# 項目 備考
3   null値です。

 

in句でのnullの条件の指定

SOQLで、in句でnullを指定可能です。 逆にin内でnullが入っていると検索結果に含まれてしまいます。
「項目 in ('valueA',null,'ValueC')」の条件に対して結果は次です。

# 項目 備考
1 valueA  
3   null値です。
4 valueC  

 

 SQLで、in句にnullを指定しても結果には含まれません。
「項目 in ('valueA',null,'ValueC')」の条件に対して結果は次です。

# 項目 備考
1 valueA  
4 valueC  

 

XX以外の条件でnullの扱い

SOQLでは、例えば 「項目 != 'valueA'」のように、XX以外を指定した場合、
指定された項目がnullの値は検索結果に含まれます。
「項目 != 'valueA'」の条件に対して結果は次です。

# 項目 備考
2 valueB  
3   null値です。
4 valueC  

 

 SOQLでは、例えば 「項目 != 'valueA'」のように、XX以外を指定した場合、
指定された項目がnullの値は検索結果に含まれません。
「項目 != 'valueA'」の条件に対して結果は次です。

# 項目 備考
2 valueB  
4 valueC  

 

 最後に

プログラムで、nullの結果が含まれる、含まれないで動きがだいぶ違うため
扱いに注意が必要です。私はSQLに慣れ過ぎていて、Salesforceの動きで大分戸惑いましたが。。