V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
sunmoon1983
V2EX  ›  MySQL

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

  •  
  •   sunmoon1983 · 2023-03-07 18:46:09 +08:00 · 1877 次点击
    这是一个创建于 611 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一张表,结构简单

    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 语句

    9 条回复    2023-03-08 13:33:05 +08:00
    tedzhou1221
        1
    tedzhou1221  
       2023-03-07 18:55:19 +08:00
    拿 json 的内容 出来看看, {"393041089290245": [这里是数组]}
    xiaoxixi
        2
    xiaoxixi  
       2023-03-07 19:01:21 +08:00
    SELECT * FROM `zp_category_relation` WHERE JSON_EXTRACT(extend, '$**.key') = "type";
    OutOfMemery
        3
    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
        4
    sunmoon1983  
    OP
       2023-03-07 20:32:20 +08:00
    @tedzhou1221 json 的内容
    ```
    {"393041089290245": [{"key": "type", "value": "3"}]}
    ```
    sunmoon1983
        5
    sunmoon1983  
    OP
       2023-03-07 20:33:04 +08:00
    @OutOfMemery 感谢,这个 SQL 能查出来
    sunmoon1983
        6
    sunmoon1983  
    OP
       2023-03-07 20:33:21 +08:00
    @xiaoxixi 查不出来呀
    sunmoon1983
        7
    sunmoon1983  
    OP
       2023-03-08 10:17:44 +08:00
    @OutOfMemery 不对呀,Mysql5.7 中好像不能用?
    OutOfMemery
        8
    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
        9
    Boyce  
       2023-03-08 13:33:05 +08:00
    ```sql
    SELECT * FROM `zp_category_relation` WHERE JSON_EXTRACT(extend, '$**.key') = JSON_ARRAY('type');
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5180 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 09:19 · PVG 17:19 · LAX 01:19 · JFK 04:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.