次の配列を持つjson列があります:
[
{
"id": "24276e4b-de81-4c2c-84e7-eed9c3582a31",
"key": "id",
"type": "input",
},
{
"id": "e0ca5aa1-359f-4460-80ad-70445be49644",
"key": "name",
"type": "textarea",
}
]
次のクエリを実行して、ドキュメント列に24276e4b-de81-4c2c-84e7-eed9c3582a31
というIDが含まれる行を取得しようとしましたが、結果が返されません。
select * from jobs WHERE document->'$[*].id' = "24276e4b-de81-4c2c-84e7-eed9c3582a31"
誰でも正しいクエリを行う方法を知っていますか?
私はmysql 5.7を使用しているため、JSON_CONTAINSは次のように簡単に使用できます。
SELECT JSON_CONTAINS(
'[{"id": "24av","name": "she"},{"id": "e0c2", "name": "another_she"}]',
JSON_OBJECT('id', "e0c2")
);
このようにしてみてください:
SELECT * FROM jobs WHERE document->'$[*].id' = json_array("24276e4b-de81-4c2c-84e7-eed9c3582a31");
それは私にとってはうまくいきます、そして私は打撃のほうがより良いと思います:
SELECT * FROM jobs WHERE json_contains(document->'$[*].id', json_array("24276e4b-de81-4c2c-84e7-eed9c3582a31"));
実際、戻り値がJSON_TYPE
であることを覚えておくのは簡単ですが、文字列やその他のことは覚えていません。
多分これ? @Barmar
SELECT * FROM jobs WHERE JSON_SEARCH(document, "one", "24276e4b-de81-4c2c-84e7-eed9c3582a31", NULL, '$[*].id') IS NOT NULL;
_document->'$[*].id'
_を使用すると、すべてのIDプロパティのコンマ区切りのリストが返されます。 document
列にオブジェクトが1つしかない場合を除いて、これは1つのID文字列の値とは異なります。
JSON値内で一致する要素を検索するには、JSON_SEARCH()
を使用する必要があります。
_SELECT *
FROM jobs
WHERE JSON_SEARCH(document, "one", "24276e4b-de81-4c2c-84e7-eed9c3582a31", NULL, '$[*].id');
_