我有一个类似的简单表格
client_id , company_id
100 1
101 1
102 1
200 2
200 2
201 2
对于每个client_id
,我应该只有一个company_id
。我需要做一个查询来检查这个。
我所做的是:
SELECT
client_id,
count(DISTINCT company_id) as count
FROM table GROUP BY
client_id
HAVING count > 1;
如果它不是空的,它应该会触发警报。
然而,我想知道我是否可以对它进行一点优化,因为我真的不需要获取每一行,我只需要知道这个查询是否至少会导致一行。
有可能吗?
EXISTS
可能更快:
select distinct client_id
from t
where exists (select 1
from t t2
where t2.client_id = t.client_id and t2.company_id <> t.company_id
);
我预计在两种情况下性能会有所改善:
- 在
(client_id, company_id)
上有一个索引 - 大多数客户只有一家公司