配列での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
比較演算子を使用できるようにするために必要です。