SQL查询完全无Implementation租户的账户列表问题求助
解决方法:查询无Implementation租户的账户列表
你的原SQL问题在于,它只是过滤掉了账户下的Implementation租户记录,但只要该账户还有其他类型的租户,就依然会返回这些非Implementation的记录,并没有排除整个存在Implementation租户的账户。下面提供几种可行的解决方案:
方案1:使用NOT EXISTS子查询(推荐)
这是最直观且性能较好的方式,直接检查账户是否不存在任何Implementation类型的租户:
SELECT a.accountname FROM account a WHERE NOT EXISTS ( SELECT 1 FROM tenant t WHERE t.accountid = a.accountid AND t.tenanttype LIKE 'Implementation%' );
方案2:使用LEFT JOIN + IS NULL
通过左关联到Implementation租户,筛选出没有匹配到该类型租户的账户:
SELECT DISTINCT a.accountname FROM account a LEFT JOIN tenant t ON a.accountid = t.accountid AND t.tenanttype LIKE 'Implementation%' WHERE t.accountid IS NULL;
这里的DISTINCT是为了避免一个账户有多个非Implementation租户时重复返回。
方案3:使用GROUP BY + HAVING统计
通过分组统计每个账户下Implementation租户的数量,筛选数量为0的账户:
SELECT a.accountname FROM account a JOIN tenant t ON a.accountid = t.accountid GROUP BY a.accountid, a.accountname HAVING SUM(CASE WHEN t.tenanttype LIKE 'Implementation%' THEN 1 ELSE 0 END) = 0;
原SQL问题说明
原SQL用INNER JOIN关联账户和租户,再过滤掉Implementation%的租户记录,本质是过滤记录而非过滤账户。比如一个账户有4个租户,其中1个是Implementation,原SQL会返回剩下3条非Implementation的记录,导致该账户依然出现在结果中,而我们需要的是完全没有Implementation租户的账户,所以要从账户维度进行排除。
内容的提问来源于stack exchange,提问作者ByteBites
相关产品推荐
相关产品推荐

