使用 Join 将子查询转换为查询

牢不可破

我有两张桌子

tblTenant

idTenant   Name
1          Hello
2          World
3          Foo 
4          Bar

tblPhone

idTenant    idPhoneType   PhoneNum
1            23             31445
1            24            43123
1            25            90899
2            23             90937
2            24             34544
4            24             23455

现在,我希望所有租户的ID谁从未PHONETYPE25。

Output:

idTenant
2
3
4

idTenant = 1 被排除,因为它有一个 phonetype = 25 的条目

我写的查询:

select * from tblTenant where idTenant not in ( SELECT distinct(idTenant) FROM tblPhone where idPhoneType = 25) ;

但我想使用 JOINS 编写此查询。是否可以?请指导我。

.

蒂姆·比格莱森

使用条件聚合:

SELECT
    t1.idTenant, t1.Name
FROM tblTenant
LEFT JOIN tblPhone t2
    ON t1.idTenant = t2.idTenant
GROUP BY
    t1.idTenant, t1.Name
HAVING
    SUM(CASE WHEN t2.idPhoneType = 25 THEN 1 ELSE 0 END) = 0 AND
    COUNT(t2.idTenant) > 0;

上述查询的关键是我们聚合了tblPhone按租户,并断言电话类型 25 永远不会发生。然后,我们加入以tblTenant引入实际的租户名称。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章