如何在MYSQL中使用AND查询JSON数组
问题的原因是用户想要在MySQL中查询JSON数组并使用AND条件进行过滤,但是给出的示例代码是在PostgreSQL中实现的。
要解决这个问题,我们需要将示例代码转换为适用于MySQL的查询。以下是在MySQL中查询JSON数组并使用AND条件的解决方法:
CREATE TABLE users (data JSON); INSERT INTO users VALUES ('[{"name": "John", "checked": "true"}, {"name": "Lucy", "checked": "false"}]'),('[{"name": "John", "checked": "false"}, {"name": "Lucy", "checked": "false"}]'),('[{"name": "John", "checked": "false"}, {"name": "Lucy", "checked": "true"}]'); SELECT * FROM users, JSON_TABLE(users.data, "$[*]" COLUMNS (name VARCHAR(50) PATH "$.name", checked VARCHAR(10) PATH "$.checked")) AS obj WHERE obj.name = 'John' AND obj.checked = 'true';
以上代码将创建一个名为users的表,并插入几个包含JSON数组的记录。然后,使用JSON_TABLE函数将JSON数组转换为表格形式,并使用obj别名引用该表格。最后,使用WHERE子句进行AND条件过滤,以获取符合条件的结果。
通过这种方式,我们可以在MySQL中查询JSON数组并使用AND条件进行过滤。
在MySQL中查询JSON数组并使用AND查询的问题是由于JSON不适合存储在MySQL中而产生的。解决方法是将数据库设计为关系型数据库,并使用额外的表来链接数据,使用SQL中的"joins"和规范化的方法。此外,从MySQL 5.7开始,可以使用一些与JSON相关的函数。以下是一个使用SQL匹配JSON的示例代码:
SELECT IF(people LIKE '%\"checked\": true%', TRUE, FALSE) AS 'john_checked' FROM table WHERE (people LIKE '%\"name\": \"John\"%')
然而,这个示例代码存在一个问题,即它会找到John为false但Lucy为true的行。因此,更好的解决方法是只获取包含"name": "John"的行,然后使用代码/脚本来解码JSON,或者不将JSON存储在MySQL中,而是使用更多的表来创建关系数据库(或使用NoSQL解决方案)。
问题的原因是用户想要在MYSQL中查询JSON数组,并且使用AND条件进行筛选。用户想要查询的条件是JSON数组中包含特定的键值对。解决方法是使用MYSQL的JSON_CONTAINS函数来实现,该函数接受两个参数,第一个参数是要查询的JSON数组字段,第二个参数是要匹配的JSON对象。在查询中,使用WHERE子句来过滤符合条件的记录。
解决方法如下所示:
SELECT * from `users`
WHERE JSON_CONTAINS(`data`, '{"name": "John","checked": true}');
如果JSON数组是{"name": John, "male": true, "checked": true},也是可以正常工作的。JSON_CONTAINS函数不依赖于JSON中的其他字段或字段的顺序。
这个方法非常有效,感谢您的回答,这是我第一次有人花时间回答我以前的问题,我非常感激!