大老们,为什么我查不出来结果呢?

2023-03-07 18:46:09 +08:00
 sunmoon1983

一张表,结构简单

CREATE TABLE `zp_category_relation` (
  `id` bigint(20) NOT NULL,
  `aid` bigint(20) NOT NULL COMMENT '文章 id',
  `cid` bigint(20) NOT NULL COMMENT '分类 id',
  `extend` json DEFAULT NULL COMMENT '扩展字段',
  PRIMARY KEY (`id`),
  UNIQUE KEY `acr_ac_uidx` (`aid`,`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分类的关系';

其中一条数据为:

INSERT INTO `zp_category_relation` (`id`, `aid`, `cid`, `extend`) VALUES (393388343615493, 393060164034565, 393041089290245, '{\"393041089290245\": [{\"key\": \"type\", \"value\": \"3\"}]}');

想查出 extend 列中,key=type 的数据,用的如下 sql 语句

SELECT * FROM `zp_category_relation` WHERE  extend->"$[*].key" = "type";

结果为空,求教更准确的 sql 语句

1915 次点击
所在节点    MySQL
9 条回复
tedzhou1221
2023-03-07 18:55:19 +08:00
拿 json 的内容 出来看看, {"393041089290245": [这里是数组]}
xiaoxixi
2023-03-07 19:01:21 +08:00
SELECT * FROM `zp_category_relation` WHERE JSON_EXTRACT(extend, '$**.key') = "type";
OutOfMemery
2023-03-07 19:54:04 +08:00
SELECT
*
FROM zp_category_relation a,
JSON_TABLE (a.extend, '$.*[*]' COLUMNS ( type text PATH '$.key', value int PATH '$.value') ) AS t
where t.type='type'
sunmoon1983
2023-03-07 20:32:20 +08:00
@tedzhou1221 json 的内容
```
{"393041089290245": [{"key": "type", "value": "3"}]}
```
sunmoon1983
2023-03-07 20:33:04 +08:00
@OutOfMemery 感谢,这个 SQL 能查出来
sunmoon1983
2023-03-07 20:33:21 +08:00
@xiaoxixi 查不出来呀
sunmoon1983
2023-03-08 10:17:44 +08:00
@OutOfMemery 不对呀,Mysql5.7 中好像不能用?
OutOfMemery
2023-03-08 10:29:27 +08:00
@sunmoon1983 #7 8.0 版本才行,话说你这是单纯的想匹配这个 key 么,那直接用 like 呗

```sql
select * from zp_category_relation where extend like '%"key": "type"%'
```
Boyce
2023-03-08 13:33:05 +08:00
```sql
SELECT * FROM `zp_category_relation` WHERE JSON_EXTRACT(extend, '$**.key') = JSON_ARRAY('type');
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/921991

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX