是否可以在 mysql where 子句中使用 json 列表中的多个值?
Is it posible to use multiple values from a json list in a mysql where clause?
我在这个 table 中填充了值,并且它们都在 JSON 中构建。
PersonID
ValueID
Value
1
1
{"Values":[{"ID":1,"Value":true},{"ID":2,"Value":true}]}
1
2
{"Values":[{"ID":2,"Value":false},{"ID":3,"Value":true}]}
所以我想知道是否有任何方法可以同时查询 ID 和值,所以我等可以搜索 "ID":1 和 "Value":true 然后它return 第一行。
我试过使用 JSON_CONTAINS_PATH、JSON_CONTAINS、JSON_SEARCH,但 none 考虑到我想在列表中搜索,我有尝试使用 $.Values[0].ID 和 returns id 但我需要在 where 中循环所有这些,否则我只会搜索 JSON 数组的第一个索引.
谁能指出我正确的方向?
SELECT
PersonID,
ValueID,
x1.*
FROM table1
cross join JSON_TABLE(table1.Value,
'$.Values[*]' COLUMNS( ID INTEGER PATH '$.ID',
Value INTEGER PATH '$.Value'
)) as x1
输出:
PersonID
ValueID
ID
Value
1
1
1
1
1
1
2
1
1
2
2
0
1
2
3
1
参见:DBFIDDLE
SELECT *
FROM table1
WHERE table1.value->'$.Values[0]' = JSON_OBJECT('ID',1,'Value',true)
我在这个 table 中填充了值,并且它们都在 JSON 中构建。
PersonID | ValueID | Value |
---|---|---|
1 | 1 | {"Values":[{"ID":1,"Value":true},{"ID":2,"Value":true}]} |
1 | 2 | {"Values":[{"ID":2,"Value":false},{"ID":3,"Value":true}]} |
所以我想知道是否有任何方法可以同时查询 ID 和值,所以我等可以搜索 "ID":1 和 "Value":true 然后它return 第一行。
我试过使用 JSON_CONTAINS_PATH、JSON_CONTAINS、JSON_SEARCH,但 none 考虑到我想在列表中搜索,我有尝试使用 $.Values[0].ID 和 returns id 但我需要在 where 中循环所有这些,否则我只会搜索 JSON 数组的第一个索引.
谁能指出我正确的方向?
SELECT
PersonID,
ValueID,
x1.*
FROM table1
cross join JSON_TABLE(table1.Value,
'$.Values[*]' COLUMNS( ID INTEGER PATH '$.ID',
Value INTEGER PATH '$.Value'
)) as x1
输出:
PersonID | ValueID | ID | Value |
---|---|---|---|
1 | 1 | 1 | 1 |
1 | 1 | 2 | 1 |
1 | 2 | 2 | 0 |
1 | 2 | 3 | 1 |
参见:DBFIDDLE
SELECT *
FROM table1
WHERE table1.value->'$.Values[0]' = JSON_OBJECT('ID',1,'Value',true)