首页 > 解决方案 > 如何计算表 A 中但不在表 B 中的成员数

问题描述

我有两张表,想计算一张表中但另一张表中没有的成员 ID 的数量。

select COUNT(DISTINCT u.member_id)
from database.tablea u
where u.member_id NOT IN (
  SELECT DISTINCT member_id
  FROM database.tableb
)

这是永远的,它不应该。代码正常吗?

如果您有更有效的代码,请告知。

标签: sqlsql-server

解决方案


我会将其更改为not exists并推荐一个索引:

select COUNT(DISTINCT u.member_id)
from database.tablea u
where not exists (select 1
                  from database.tableb b
                  where u.member_id = b.member_id
                 );

然后,你想要一个关于tableb(member_id).

如果你有一张members桌子,那么你可能会发现最快的方法是:

select count(*)
from members m
where exists (select 1
              from database.tablea u
              where u.member_id = m.member_id
             ) and
      not exists (select 1
                  from database.tableb b
                  where b.member_id = m.member_id
                 );

打开索引tablea(member_id)tableb(member_id)这应该很快。唯一不会出现这种情况的情况是,如果您memberstablea.


推荐阅读