新手问题 连表查询的问题

tcstory · 2017年01月02日 · 最后由 fxllong262553 回复于 2017年01月06日 · 2505 次阅读

额,小弟刚做后端不久,可能有一些名词会弄错,希望大大们见谅。

目前,我在做的一个后台的服务,涉及到一个 主播工资结算的查询

a 表:主播个人信息表 b 表:每个月主播的工资表,b 表为主要的表

普通的查询: 先从 b 表里面拉取 20 条数据,然后在根据主播的 id 去 a 表里面把主播的信息拉回来,然后根据 id 拼接数据,然后返回给前端

条件查询: 假如我要查询的主播类型是已经签约的,我的做法是,去 a 表里面把已经签约的主播的前 20 条找回来,然后拿着这个 20 个 id 去 b 表里面把相关的工资记录找到,然后再去拿一次 a 表的数据,把主播的信息补充完整,然后返回给前端

条件查询会遇到的问题是,假如我在 a 表里面找到前 20 条数据,刚好在 b 表里面找不到,那么就不会返回任何数据,那么会给人的感觉是"我想查看已经签约的主播的工资记录,但是却没有找到任何一条记录",也许你会奇怪为啥在 b 表里面会找不到数据,因为 b 表里面的数据是每个主播每个月的工资,有一些主播可能是刚签约的,所以刚好缺少某一个月的数据。

这个问题该如何解决呢?我们的数据库是拆分开的,不允许用 left join 之类的东西

第一个查询加上 exists,多查一次 b 表,大概这样吧

select id from a where exists (select * from b)

我想问一下,为啥不让用 left join 之类的啊?有什么缺点吗?

#1 楼 @pinewong 同问,有那么多主播吗?

#1 楼 @pinewong 他应该是跨库了,oracle 有 dblink,MySQL 也有类似的解决方案,如果不能动数据库,就需要分步洗数据,先把工资表 group 出主播信息,然后在主播表去关联查询

什么直播平台啊,后台用 rails 开发

需要 登录 后方可回复, 如果你还没有账号请 注册新账号