我的数据保存为
_________________________________
id | category | other data etc
--------------------------------
1 | ["2","3"] |bla bla
--------------------------------
2 | ["254","34"]|bla bla
--------------------------------
3 | ["11","25"] |bla bla
_________________________________
Run Code Online (Sandbox Code Playgroud)
我想选择类别=11 的行。我应该使用什么 SQL 查询?
除非您使用 MySQL 5.7 并且该category列使用JSON 数据类型,否则您无法真正做到这一点。如果是,您可以使用JSON_CONTAINS函数:
SELECT * FROM `yourtable`
WHERE JSON_CONTAINS(category, '"11"')
Run Code Online (Sandbox Code Playgroud)
注意收容规则:
当且仅当它们可比较且相等时,候选标量包含在目标标量中。如果两个标量值具有相同的 JSON_TYPE() 类型,则它们是可比较的,但 INTEGER 和 DECIMAL 类型的值也可以相互比较。
当且仅当候选中的每个元素都包含在目标的某个元素中时,候选数组才包含在目标数组中。
当且仅当候选非数组包含在目标的某个元素中时,候选非数组才包含在目标数组中。
当且仅当候选对象中的每个键在目标中都有一个同名的键,并且与候选键关联的值包含在与目标键关联的值中时,候选对象才包含在目标对象中。
我们可以在这个数据集中看到数据类型的问题:
CREATE TABLE myjson (
id tinyint unsigned primary key auto_increment,
category JSON
);
mysql> SELECT * FROM myjson;
+----+---------------+
| id | category |
+----+---------------+
| 1 | ["2", "3"] |
| 2 | ["254", "34"] |
| 3 | ["11", "25"] |
| 4 | [2, 11] |
+----+---------------+
4 rows in set (0.00 sec)
mysql> SELECT * FROM `myjson` WHERE JSON_CONTAINS(category, "11");
+----+----------+
| id | category |
+----+----------+
| 4 | [2, 11] |
+----+----------+
1 row in set (0.00 sec)
mysql> SELECT * FROM `myjson` WHERE JSON_CONTAINS(category, '"11"');
+----+--------------+
| id | category |
+----+--------------+
| 3 | ["11", "25"] |
+----+--------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5212 次 |
| 最近记录: |