python - 将连接查询的结果聚合到列表中
问题描述
让我缩短我的要求并通过一个例子来理解它。
假设我有两张桌子表 1 = 书籍
ID : 名称 : Lcode
1:书1:101
2:书2:102
3:书1:102
表 2 = 语言
代码:lname
101:恩
第 102 节
现在我在 mysql 中使用这些数据使用烧瓶作为 json 返回。
我有很多这样的表,我需要在 10 个这样的表的某些列上应用一些过滤条件。
在输出中,我希望每一行都像,如果它有多个值,它应该作为一个列表出现
如果我想要书名和语言
Book1 : [en,fr]
Book2 : zh
目前我正在使用一个基本的选择查询,在 lcode 列上使用内部连接,我从中得到输出
Book1:en
书1:fr
Book2:en
如果我使用,
Select b.name,l.lname from books b inner join language l on l.lcode=b.lcode group by b.name
这将是一个错误的 sql 语句
如果我使用,
Select b.name,l.lname from books b inner join language l on l.lcode=b.lcode group by b.name,l.lname
这不会给我正确的结果
解决方案
GROUP_CONCAT
可能是你所追求的。
设置
create table books(
id serial primary key,
name text,
language_id int
);
create table languages(
id serial primary key,
name text
);
insert into books(name, language_id) values ('book1', 1), ('book2', 2), ('book1', 2);
insert into languages(name) values ('en'), ('fr');
询问
SELECT
b.name,
GROUP_CONCAT(l.name) as languages
FROM
books b
INNER JOIN languages l ON b.language_id = l.id
GROUP BY b.name
结果
name languages
book1 en,fr
book2 fr
推荐阅读
- javascript - Websocket 与 SockJS 对象
- php - Symfony 4 服务依赖注入 - 构造函数与方法
- vba - LockWindowsUpdate 适用于 Office 2010 但不适用于 Office 2016
- delphi - 缩小问题。不缩小以放大图像
- swift - 内部闭包的返回值
- algorithm - 奇偶算法如何计算多边形边?
- git - 如何同步不同网络上的两个 git 存储库
- java - Java JUnit测试实现分支覆盖
- elasticsearch - ElasticSearch => 如何使用 update_by_query 更新部分文档
- php - 基于产品数量的 ACF 转发器在 Woocommerce 中生成结帐字段