应用的数据仓库里的 post 数据表还有 file 数据表之间有个关系,就是在 file 数据表里面会记录文件相关的内容,postId 栏目的值就是 post 数据表里的 id 栏目的值。 现在这个表里面有几个文件数据,关联的就是 id=3 的这个内容。
打开 SQL 窗口,在这里我们可以先写一段查询,调取一个内容列表,在列表的内容项目里面加上内容相关的文件。SELECT 所有的东西,来自 post 数据表。
用 LEFT JOIN 拼接一下 file 数据表,在 ON 的后面设置一个条件,条件是 file 表里的 postId 栏目的值等于 post 数据表里的 id 栏目的值。执行一下这段查询。
查询出来的结果就是一个内容列表,包含了内容相关的文件,因为一个内容可能会有多个相关的文件,所以在结果里面会出现重复的内容,每个内容数据的相关的文件都不一样。
这里我们可以在查询里面用 GROUP BY 按 post.id 分下组。执行查询,会提示一个查询错误,按 post.id 分组以后,因为文件相关的数据可能包含多个值,所以不能直接把它们包含在选择的栏目里,需要用一些特别的方法,把多个值组合成一个值。
在选择的栏目里,可以加上 post.id 还有 post.title ,然后再用一个 JSON_ARRAYAGG 把多个值组织成一个数组,暂时先添加一个 file.id ,这样这个数组里的数据项目就是一组内容相关的文件的 id 。 用 AS 给它起个名字,叫 files 。 执行一下这段查询。
你会发现,这次在查询结果里面会出现一个 files 栏目,它的值是个数组。如果内容还没有相关的文件,在这个数组里会有一个 null,如果有相关的文件,这个数组里就是一组相关文件的 id 。 比如这个 id=3 的内容,有 4 个相关的文件,它们的 id 分别是 1,2,3,4。