首页 > 解决方案 > 将连接查询的结果聚合到列表中

问题描述

让我缩短我的要求并通过一个例子来理解它。

假设我有两张桌子表 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 

这不会给我正确的结果

标签: pythonmysql

解决方案


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

SQL小提琴


推荐阅读