一张桌子减去另一张

时间:2012-08-27 09:25:32

标签: sql

我不确定如何做到这一点。 我有三个表成员表,有238871个成员                     有7713个条目的工作表                     交易表和231142条目

如果我采取238871成员减去交易表中的数据,我得到7729的差异。在工作表中我有7713个条目,因此在成员表中有16个未计入。所有的交易都在工作和会员表中。但在会员中有一个不在工作和交易中的16。

如何定义这16名成员? 感谢

1 个答案:

答案 0 :(得分:2)

实际上,left join会在jobsortedusers中为您提供所有。然后members中的所有内容都在jobsortedusers中。

听起来你要么想要颠倒左外连接的顺序而要这样做:

select * 
  from membership.members as mm
  left outer join jobsorted.jobsortedusers as js
    on mm.memberid = js.memberid

这可以让您了解members中的所有内容,然后jobsortedusers中的所有内容也会显示在members中。正如你所说,每个用户也是一个成员,这个查询会返回你的所有内容。

我强烈建议您阅读this, which explains joins very well


要回答您的新问题,您需要jobsortedusers id为空的所有内容,即

select mm.* -- every other column will be null
  from membership.members as mm
  left outer join jobsorted.jobsortedusers as js
    on mm.memberid = js.memberid
 where js.memberid is null

我不知道要加入trade的内容,但为了获取此表或用户表中没有的所有内容,您需要这样的内容:

select mm.* -- every other column will be null 
  from membership.members as mm
  left outer join jobsorted.jobsortedusers as js
    on mm.memberid = js.memberid
  left outer join trade t
    on mm.memberid = t.memberid
 where js.memberid is null
   and t.memberid is null