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