3

私はbrewを介してJSON1でSQLite3をインストールしました:

brew install sqlite3 --with-json1 --with-fts5

バージョン:

3.15.2 2016-11-28 19:13:37 bbd85d235f7037c6a033a9690534391ffeacecc8

クエリを実行すると、次のような一部の関数が正常に動作しますjson_extract

sqlite> SELECT json_extract(Body, '$.issue.fields.labels') FROM Event WHERE json_extract(Body, '$.issue.fields.labels') != '[]';

["foo","bar","baz"]

ただし、json_eachorを使用しようとするjson_treeと失敗します。

sqlite> SELECT json_each(Body, '$.issue.fields.labels') FROM Event WHERE json_extract(Body, '$.issue.fields.labels') != '[]';

Error: no such function: json_each

テーブル内のBodyフィールドは有効な JSON 文字列です。Event

{"issue":{"fields":{"labels": ["foo","bar","baz"]}}}

そして、labels値は配列です。

私はドキュメントを読んで (そしてjson_each の例を見て)、インターウェブを検索しましたが、これを有効にするための追加の要件を見つけることができませんでした。

私は何を間違っていますか、または json_each/json_tree からどのように利益を得るのですか?

4

2 に答える 2

3

問題は、json_eachjson_treeテーブル値関数であることです。つまり、これらの関数は、データベースから直接データをクエリするのではなく、メモリ内に既に存在する仮想テーブルのデータをフェッチするためにのみ使用できます。

参照: SQLite の仮想テーブル メカニズム

2.1.2. テーブル値関数

非表示の列を含む仮想テーブルは、SELECT ステートメントの FROM 句でテーブル値関数のように使用できます。テーブル値関数の引数は、仮想テーブルの非表示列に対する制約になります。

sqlite3SELECT json_each(Body, '$.issue.fields.labels') ...がその定義と一致する関数を見つけることができずSELECT、表示されるエラーが発生する場合。

于 2016-12-24T06:13:37.750 に答える
2

json_each()私の知る限り、 andjson_tree()をクエリのフィールドとして使用することはできません。これらはテーブル値関数です。テーブルのようにしか使用できません。

于 2016-12-24T06:03:45.533 に答える