mysql json or查询
时间: 2023-10-14 08:11:36 浏览: 86
mysql查询字段类型为json时的两种查询方式
MySQL支持使用JSON数据类型进行高级查询,其中包括OR查询。
例如,假设我们有一个名为“users”的表,其中包含以下数据:
```
+----+---------------------+
| id | data |
+----+---------------------+
| 1 | {"name": "Alice"} |
| 2 | {"name": "Bob"} |
| 3 | {"name": "Charlie"} |
+----+---------------------+
```
如果我们想要查询所有名字为“Alice”或“Bob”的用户,我们可以使用以下查询:
```
SELECT * FROM users WHERE JSON_EXTRACT(data, '$.name') IN ('Alice', 'Bob');
```
这将返回以下结果:
```
+----+---------------------+
| id | data |
+----+---------------------+
| 1 | {"name": "Alice"} |
| 2 | {"name": "Bob"} |
+----+---------------------+
```
在这个查询中,我们使用了JSON_EXTRACT函数来提取“data”列中的“name”字段的值,并将其与“IN”运算符一起使用来匹配我们想要的值。
请注意,如果您的JSON数据包含嵌套的对象或数组,您可以使用“->”运算符来访问它们。例如,如果我们的数据如下所示:
```
+----+-------------------------------------+
| id | data |
+----+-------------------------------------+
| 1 | {"name": "Alice", "age": 30} |
| 2 | {"name": "Bob", "age": 25, "hobbies": ["reading", "traveling"]} |
| 3 | {"name": "Charlie", "age": 40} |
+----+-------------------------------------+
```
我们可以使用以下查询来查找所有名字为“Alice”或“Bob”,或者年龄大于等于30岁并且有“reading”这个爱好的用户:
```
SELECT * FROM users
WHERE (JSON_EXTRACT(data, '$.name') IN ('Alice', 'Bob'))
OR (JSON_EXTRACT(data, '$.age') >= 30 AND JSON_CONTAINS_PATH(data, 'one', '$.hobbies[*]') > 0);
```
这将返回以下结果:
```
+----+---------------------------------------------------------------+
| id | data |
+----+---------------------------------------------------------------+
| 1 | {"name": "Alice", "age": 30} |
| 2 | {"name": "Bob", "age": 25, "hobbies": ["reading", "traveling"]} |
| 3 | {"name": "Charlie", "age": 40} |
+----+---------------------------------------------------------------+
```
在这个查询中,我们使用了JSON_CONTAINS_PATH函数来检查用户是否有“reading”这个爱好。请注意,我们使用了“> 0”来确保结果集中只包含具有此爱好的用户。
阅读全文