sql - 如何计算表 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
)
这是永远的,它不应该。代码正常吗?
如果您有更有效的代码,请告知。
解决方案
我会将其更改为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)
这应该很快。唯一不会出现这种情况的情况是,如果您members
在tablea
.
推荐阅读
- angular - 按下返回按钮后的延迟
- java - Rundeck [ssh-exec] 找不到 bash
- sql-server - 通过从 ComboBox 中选择任何表来填充 DataGridView
- android-kernel - 仿生/libc/include/sys/epoll.h:67:8:错误:重新定义“epoll_event”
- multithreading - Azure Continues Job 随机失败,Job failed due to exit code -532462766
- javascript - 强制输入字段的首字母大写,其余小写
- selenium - Selenium 和自定义 Web 扩展之间的通信
- c# - odata 中的 MaxExpansionDepth 未返回预期结果
- vue.js - Vuejs 在输入更改时设置 v-model
- selenium-webdriver - 在命令行上运行 Selenium 测试时,如何仅在该元素可见时才执行命令?