问题的标题可能不是最佳的。
我想要实现的是从尚未删除网站的表company_id
中检索site
。但是,company
有多个网站。我不想选择有一个或多个未删除网站的公司。
SELECT DISTINCT(company_id) FROM site WHERE _isDeleted = 1;
给我删除网站的公司(8000多个结果)。
但是当我尝试时:
SELECT DISTINCT(company_id) FROM site WHERE _isDeleted = 1
AND company_id NOT IN (SELECT company_id FROM site WHERE _isDeleted = 0);
它给了我0结果。为什么?
性能不存在问题,因为它将是一次运行策略查询。
答案 0 :(得分:1)
我倾向于真的不喜欢习语NOT IN (<subquery>)
的大部分用法。对于这个特殊需求,我会考虑这样的查询,而不是:
SELECT company_id
FROM site
GROUP BY company_id
HAVING COUNT(*) != COUNT(NULLIF(_isDeleted, 0))
适用_isDeleted
的任何值,NULL
实际上等同于0
,所有其他值实际上等同于1
。我还发现它的含义比原始查询更清晰,如果你关心性能,那么它可能会表现得更好。
答案 1 :(得分:1)
根据您的要求,您需要从未删除网站的表网站中的所有公司,您可以轻松地执行以下操作
select distinct company_id from site where _isdeleted=0 and company_id is not null
要获得没有网站删除的公司,您可以使用
select distinct company_id from site p
where not exists(select 1 from site x
where x.company_id=p.company_id and x._isdeleted=1)
and p._isdeleted=0
希望它会帮助你