Sql 比较两个表并删除匹配的表

Sql 比较两个表并删除匹配的表,sql,Sql,我有两张桌子。MembID是每个字段返回的唯一列。MembID可以在两个表中,但我想从结果中删除两个表中的MembID 我希望最后一次返回是A表中的456和789 我试过: select distinct a.membid from a left join b on a.membid = b.membid and b.num <> 1 它不会返回任何结果 谢谢 试试下面的方法 select distinct a.membid from a left join b on a.m

我有两张桌子。MembID是每个字段返回的唯一列。MembID可以在两个表中,但我想从结果中删除两个表中的MembID

我希望最后一次返回是A表中的456和789

我试过:

select distinct a.membid
from a
 left join b on a.membid = b.membid
and b.num <> 1 
它不会返回任何结果

谢谢

试试下面的方法

select distinct a.membid
from a
 left join b on a.membid = b.membid
where b.membid is null
MembID可以在两个表中,但我想从结果中删除两个表中的MembID

如果您只希望成员位于一个表中,则有一种方法:

select memberid
from ((select memberid, 1 as in_a, 0 as in_b from a
      ) union all
      (select memberid, 0, 1 from b
      )
     ) ab
group by memberid
having max(in_a) + max(in_b) = 0;
请注意,此版本允许在每个表中重复

在支持基于集的运算符的数据库中,还可以执行以下操作:

(select memberid from a union
 select memberid from b
) except -- sometimes this is minus
(select memberid from a intersect
 select memberid from b
);
编辑:

您对问题的描述与您的数据不匹配。您似乎希望a中的成员不在b中。一种方法阐述了第一种方法:

select memberid
from ((select memberid, 1 as in_a, 0 as in_b from a
      ) union all
      (select memberid, 0, 1 from b
      )
     ) ab
group by memberid
having max(in_a) + max(in_b) = 0;
或者第二个:

select memberid from a
except  -- or minus
select memberid from b
但是,我通常会这样做:

select distinct memberid
from a
where not exists (select 1 from b where b.memberid = a.memberid);