配列でのNULLの検出

JSON入力ストリームで検出されたすべての配列は、ARRAY(JSON)として内部的に格納されます。このため、配列のメンバーのタイプに一貫性がない場合があります。

この例では、ユーザーID 4のphones配列にnull要素が含まれています。

sql-> SELECT j.person.address.phones FROM JSONPersons j WHERE j.id=4;
 +--------------------+
 |       phones       |
 +--------------------+
 | areacode | 339     |
 | number   | 4120211 |
 | type     | work    |
 |                    |
 | areacode | 339     |
 | number   | 8694021 |
 | type     | work    |
 |                    |
 | areacode | 339     |
 | number   | 1205678 |
 | type     | home    |
 | null               |
 |                    |
 | areacode | 305     |
 | number   | 8064321 |
 | type     | home    |
 +--------------------+ 

表でこれを検出するには、phones配列にnull値がないか調べます。

sql-> SELECT id, j.person.address.phones FROM JSONPersons j 
WHERE j.person.address.phones[] =any null;
 +----+--------------------+
 | id |       phones       |
 +----+--------------------+
 |  4 | areacode | 339     |
 |    | number   | 4120211 |
 |    | type     | work    |
 |    |                    |
 |    | areacode | 339     |
 |    | number   | 8694021 |
 |    | type     | work    |
 |    |                    |
 |    | areacode | 339     |
 |    | number   | 1205678 |
 |    | type     | home    |
 |    | null               |
 |    |                    |
 |    | areacode | 305     |
 |    | number   | 8064321 |
 |    | type     | home    |
 +----+--------------------+

1 row returned 

前述の問合せでは配列フィルタ・ステップ([])を使用していることに注意してください。これは、配列をシーケンスに展開して、=any比較演算子を使用できるようにするために必要です。