用户登录

一个内容可能会有多个相关的文件,把内容跟文件数据表拼接到一块儿,就可以得到一个内容相关的文件列表,如果你想限制一下获取到的相关文件的数量,就不能直接拼接文件数据表,可以用一个子查询创造一个文件数据表,在这个文件数据表里面,让它只能包含与内容相关的一条文件数据。 下面我们看一下这条子查询应该怎么表达。

这里把 LEFT JOIN 后面的 file 换成一个子查询,给查询的结果起个名字叫 file。后面设置的拼接的条件是一样的,就是 file 这个表里的 postId 等于 post 表里的 id 。

然后再写一下这个子查询,用 SELECT ,选择所有的东西,数据来自 file 这个数据表。用 WHERE 设置一个条件,条件是 file 表里的 postId 栏目的值应该等于 post 数据表里的 id 栏目的值。

下面可以再用 ORDER BY 设置一个排序,按 file 的 id 降序排列,DESC 表示降序。最后再用 LIMIT 限制一下结果的数量,把它设置成 1 。

执行一下这段查询,提示在 WHERE 里不能使用 post.id 这个栏目。要想在这个子查询里引用主查询的数据来源,在这段查询里就是 post 数据表里的东西。需要在 LEFT JOIN 的后面,加上一个 LATERAL ,注意这个关键词只能在 8.x 以上版本的 MySQL 里面使用。执行一下查询。

观察一下查询出来的结果,在这个 files 栏目里面,只会包含一个跟这个内容项目相关的文件。注意这个内容相关的文件的 id 是 4,之前这个内容有 4 个相关的文件,id 分别是 1,2,3 还有 4。因为我们在子查询里用了 ORDER BY 设置了排序方式,所以这里给我们的是最近关联到内容上的文件。

SQL:拼接文件数据表时限制内容相关文件的数量《 Node.js 服务端应用开发:内容列表 》

统计

14696
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点