【发布时间】:2018-06-20 16:18:31
【问题描述】:
我为标题道歉,但我真的想不出一个更清晰的标题。
假设我有一桌书:
id | title
---|------------
1 | Childhood's End
2 | Annihilation
3 | The Light of Other Days
还有一个跟踪与每本书关联的文件的表格,因为电子书可以以多种格式存在:
id | format | book_id | size
---|--------|---------|---------
1 | EPUB | 1 | 207 KB
2 | PDF | 1 | 409 KB
3 | MOBI | 1 | 310 KB
4 | EPUB | 2 | 773 KB
5 | MOBI | 3 | 1020 KB
我想做的是发出一个选择查询,该查询返回书籍列表、该书籍可用的格式列表以及每种格式的大小。为了说明,如果我将结果转换为 JSON,我的目标是
[
{
"title": "Childhood's End",
"formats": [
{ "format": "EPUB", "size": "207 KB" },
{ "format": "PDF", "size": "409 KB" },
{ "format": "MOBI", "size": "310 KB" }]
}
]
我知道我可以使用 group_concat 将连接表中的多行与“初始”表中的一行相关联,这样 book_id 1 可以在结果中有一个带有 "EPUB,PDF,MOBI" 的字段,只是一个逗号分隔细绳。我不知道我是否可以,如果可以,我将如何选择两个值,并保持关联。
是否可以通过单个 SQL 查询检索所有这些信息?是否需要使用选择子查询?如果需要,效率会非常低吗?
我问的是一般的 SQL,但如果特定系统很重要,则需要 SQLite。
【问题讨论】: