1
zyxk OP 标题 安装=按照
|
2
sun522198558 2022-10-26 18:29:47 +08:00 1
外层在加个左连
|
3
wxf666 2022-10-26 19:08:41 +08:00
用 json 函数试试?
`SQLite` 测试通过:*(`MySQL` 可用 `json_table`。V 站排版原因,行首有全角空格)* ```sqlite WITH t_name(id, name, zone_id) AS ( VALUES (3, 't1', '23,24'), (4, 't2', '24,23') ), t_zone(zone_id, zone) AS ( VALUES (23, '5 元区'), (24, '10 元区') ) SELECT a.id, a.name, a.zone_id, b.value, GROUP_CONCAT(c.zone) FROM t_name a JOIN json_each(format('[%s]', a.zone_id)) b LEFT JOIN t_zone c ON b.value = c.zone_id -- 只能 LEFT JOIN 。怀疑是 JOIN 时,b 表会提前排好序,加速 b.id = c.id 匹配 GROUP BY a.id; ``` |
4
zyxk OP @wxf666 #3
不好意思, 我没有用过 json_table, 不知道什么原因, SQLite 和 MySQL 上, 都不行, 如下图, 我稍后查询一下 json_table format 怎么使用. https://imgur.com/B7l81In |
5
wxf666 2022-10-26 20:15:01 +08:00 1
@zyxk `SQLite` 咋可能不行。。
`MySQL` 语法:*(就是觉得 `json_table` 繁杂,懒得查文档才用的 `SQLite`。。V 站排版原因,行首有全角空格)* ```mysql WITH t_name(id, name, zone_id) AS ( VALUES ROW(3, 't1', '23,24'), ROW(4, 't2', '24,23') ), t_zone(zone_id, zone) AS ( VALUES ROW(23, '5 元区'), ROW(24, '10 元区') ) SELECT a?id, a?name, a?zone_id, group_concat(c?zone) AS zone FROM t_name AS a JOIN json_table(concat('[', a?zone_id, ']'), '$[*]' COLUMNS(zone_id INT PATH '$')) AS b JOIN t_zone AS c ON b?zone_id = c?zone_id GROUP BY a?id ``` 我是数据库新手,不知这是不是奇技淫巧。或许你等大佬来指出真正问题所在才是正道。。 V 站告诉我: 创建新回复过程中遇到一些问题: - 请不要在每一个回复中都包括外链,这看起来像是在 spamming 我把所有的 . 换成 ? 了,记得替换回来 |
6
zyxk OP @wxf666 #5 感谢, 空格去了, SQlite 的不行, 不过无所谓了, MySQL 是正常的, 只是需要更新 MySQL8 , 我要测试下我的程序和 MySQL8 的兼容性和性能, 不知道性能怎么样, 再次非常感谢.
|
7
nuanshen 2022-10-27 14:23:07 +08:00 1
mysq 的话简单,group_concat 里是可以指定排序的,group_concat(b.zone order by find_in_set(b.zone_id,a.zone_id))
|