JSON配列内に特定の日付を含む行があるかどうかを確認しようとしています
私のデータは次のように見えるとしましょう:
テーブルアプリケーション:
id | application_id | data
# Rows
1 | 1 | [{"data" : ["some", "data#1"], "date": "2016-04-21"}, {"data" : ["other", "data#1"], "date" : "2016-04-22"}]
2 | 2 | [{"data" : ["some", "data#2"], "date": "2016-04-21"}, {"data" : ["other", "data#2"], "date" : "2016-04-26"}]
3 | 1 | [{"data" : ["some", "data#3"], "date": "2016-04-22"}, {"data" : ["other", "data#3"], "date" : "2016-04-26"}]
4 | 3 | [{"data" : ["some", "data#4"], "date": "2016-04-26"}]
データに日付が含まれるすべてのアプリケーションを見つけるにはどうすればよい'2016-04-26'
ですか?
だから基本的に私はこれを行うことができます:
select id, json_extract(`data`, "$[*].date") from applications
返されるもの:
1 | ["2016-04-21", "2016-04-22"]
2 | ["2016-04-21", "2016-04-26"]
3 | ["2016-04-22", "2016-04-26"]
4 | ["2016-04-26"]
しかしjson_extract
、WHERE
句で使用しようとすると、次のように、配列のキーをjson_extract
パス引数で明示的に指定した場合にのみ使用できます:
select * from applications where json_extract(`data`, "$[0].date") = "2016-04-26"
ID 4の行を正しく返します。
しかし、パスでワイルドカードを使用しようとすると、機能しなくなります:
select * from applications where json_extract(`data`, "$[*].date") = "2016-04-26"
これにより、行2、3、4が返されます。
他の多くのオプション/バリエーションを試しましたが、クエリを正しく構成する方法を見つけることができないようです。
MySQL JSONの現在の実装でもこのようなことが可能ですか?
data
、 "$ [0] .date")をアプリケーションから 'date'として、選択-id、json_extract(data
、 "$ [1] .date")をアプリケーションから 'date'などとして、すべてのフィルターを適用IDのリストがある