我现在有一个数据表,其中包含以下字段:ID,主场,客场,状态。
JSON 数据存储在主场和客场字段中
id | home | away |
---|
{"id":10, "value":0} |
{"id":11, "value":0} |
3 |
{"id":11, "value":0} | {"id":10, "value":0} | 3 |
{"id":10, "value":0} | {"id":20, "value":0} | 3 |
{"id":40, "value":0} | {"id":10, "value":0} | 2 |
您需要在 WHERE 子句中添加另外两个限制:
仅返回状态等于 3、home->id 或 away->id 等于 10 且 home->id 不等于 11 且 away->id 不等于 11 的行。
SELECT *
FROM table_name
WHERE
status = '3'
AND (home->"$.id" = 10 OR away->"$.id" = 10)
AND home->"$.id" != 11
AND away->"$.id" != 11
ORDER BY id DESC;
小心在 WHERE 子句中使用 AND 和 OR:这个status = '3' AND home->"$.id" = 10 OR away->"$.id" = 10
就像(status = '3' AND home->"$.id" = 10) OR away->"$.id" = 10
不像status = '3' AND (home->"$.id" = 10 OR away->"$.id" = 10)
。有时您需要使用括号。
在这种情况下,您可以使用JSON_CONTAINS
函数作为方法:
select *
from tbl
where
status = 3 and
not json_contains(home, '11', '$.id') and
not json_contains(away, '11', '$.id');
在此处测试 MySQL 查询