MySQL 创建 JSON_OBJECT 从通配符 SELECT 自动构建?
MySQL create JSON_OBJECT automatically build from wildcard SELECT?
遗憾的是,MySQL 不提供类似
的功能
SELECT JSON_OBJECT(*) FROM table
现在我想知道是否有人已经编写了执行此任务的函数。我想要实现的是从任何给定的 table 中做出 SELECT *
声明 returns a JSON_OBJECT
.
当然可以为每个给定的 table 手动创建它。但我正在寻找一种更通用的方法,我不需要手动指定所有列。
没有动态 SQL 就无法做到这一点。 JSON_OBJECT()
采用必须固定 key/value 对的参数。如果您想要一个 JSON_OBJECT()
表达式为 table 的每一列生成一个键,请参考 INFORMATION_SCHEMA 并生成一个表达式列表,然后在动态 [=19] 中使用该列表=] 查询.
示例:
mysql> create table mytable (id serial primary key, name text, created_at datetime);
mysql> insert into mytable set name='Bill', created_at=NOW();
mysql> select * from mytable;
+----+------+---------------------+
| id | name | created_at |
+----+------+---------------------+
| 1 | Bill | 2021-09-19 17:37:05 |
+----+------+---------------------+
mysql> select concat('select json_object(',
group_concat(concat(quote(column_name), ', ', column_name)),
') from mytable;') into @sql
from information_schema.columns
where table_schema = 'test' and table_name = 'mytable';
mysql> select @sql;
+----------------------------------------------------------------------------------+
| @sql |
+----------------------------------------------------------------------------------+
| select json_object('id', id,'name', name,'created_at', created_at) from mytable; |
+----------------------------------------------------------------------------------+
mysql> prepare stmt from @sql;
mysql> execute stmt;
+-----------------------------------------------------------------------+
| json_object("id", id,"name", name,"created_at", created_at) |
+-----------------------------------------------------------------------+
| {"id": 1, "name": "Bill", "created_at": "2021-09-19 17:37:05.000000"} |
+-----------------------------------------------------------------------+
遗憾的是,MySQL 不提供类似
的功能SELECT JSON_OBJECT(*) FROM table
现在我想知道是否有人已经编写了执行此任务的函数。我想要实现的是从任何给定的 table 中做出 SELECT *
声明 returns a JSON_OBJECT
.
当然可以为每个给定的 table 手动创建它。但我正在寻找一种更通用的方法,我不需要手动指定所有列。
没有动态 SQL 就无法做到这一点。 JSON_OBJECT()
采用必须固定 key/value 对的参数。如果您想要一个 JSON_OBJECT()
表达式为 table 的每一列生成一个键,请参考 INFORMATION_SCHEMA 并生成一个表达式列表,然后在动态 [=19] 中使用该列表=] 查询.
示例:
mysql> create table mytable (id serial primary key, name text, created_at datetime);
mysql> insert into mytable set name='Bill', created_at=NOW();
mysql> select * from mytable;
+----+------+---------------------+
| id | name | created_at |
+----+------+---------------------+
| 1 | Bill | 2021-09-19 17:37:05 |
+----+------+---------------------+
mysql> select concat('select json_object(',
group_concat(concat(quote(column_name), ', ', column_name)),
') from mytable;') into @sql
from information_schema.columns
where table_schema = 'test' and table_name = 'mytable';
mysql> select @sql;
+----------------------------------------------------------------------------------+
| @sql |
+----------------------------------------------------------------------------------+
| select json_object('id', id,'name', name,'created_at', created_at) from mytable; |
+----------------------------------------------------------------------------------+
mysql> prepare stmt from @sql;
mysql> execute stmt;
+-----------------------------------------------------------------------+
| json_object("id", id,"name", name,"created_at", created_at) |
+-----------------------------------------------------------------------+
| {"id": 1, "name": "Bill", "created_at": "2021-09-19 17:37:05.000000"} |
+-----------------------------------------------------------------------+