JSONでのWHERE EXISTSの使用方法
前の項で説明したように、列タイプがJSONの場合、同じ表の異なる行に異なる情報が含まれている可能性があります。特定のJSON列に必要な情報が存在するかどうかを確認するには、EXISTS
演算子を使用します。
たとえば、JSONの個人の中には、住所に郵便番号が入力されているものと、そうでないものとがあります。次の問合せを使用して、郵便番号を持つすべてのユーザーを表示します。
sql-> SELECT id, j.person.address AS Address FROM JSONPersons j
WHERE EXISTS j.person.address.zipcode;
+----+--------------------------------+
| id | Address |
+----+--------------------------------+
| 2 | city | Beloit |
| | phones |
| | areacode | 339 |
| | number | 1684972 |
| | type | home |
| | state | WI |
| | street | 187 Hill Street |
| | zipcode | 53511 |
+----+--------------------------------+
| 1 | city | Antioch |
| | phones |
| | areacode | 423 |
| | number | 8634379 |
| | type | home |
| | state | TN |
| | street | 150 Route 2 |
| | zipcode | 37013 |
+----+--------------------------------+
2 rows returned
非一貫性を見つけるためにデータを問い合せるときには、WHERE NOT EXISTS
を使用して情報が欠落しているすべての行を確認する方が、通常はより便利です。
sql-> SELECT * FROM JSONPersons j WHERE NOT EXISTS j.person.lastname;
+----+-------------------+
| id | person |
+----+-------------------+
| 7 | myarray |
| | 1 |
| | 2 |
| | 3 |
| | 4 |
| | mynumber | 5 |
+----+-------------------+
| 6 | myarray |
| | 1 |
| | 2 |
| | 3 |
| | 4 |
| | mynumber | 5 |
+----+-------------------+
1 row returned