我有两张桌子
Scanner sc = new Scanner(System.in);
while (sc.nextLine().equals("Y")){
// Do Stuff
}
现在我想要所有从不 语音 25
的租户IDtblTenant
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
idTenant = 1被排除,因为它有一个phonetype = 25
的条目查询我写道:
Output:
idTenant
2
3
4
但我想用JOINS编写这个查询。可能吗?请指导我。
答案 0 :(得分:3)
使用条件聚合:
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
以引入实际的租户名称。
答案 1 :(得分:1)
我们可以使用Left Join
-
select distinct
T.idTenant
from tblTenant T
left join tblPhone P on P.idTenant = T.idTenant and P.idPhoneType = 25
where P.idTenant IS NULL
答案 2 :(得分:1)
试试这个:
CREAte TAble #tblTenant(idTenant INT,Name VARCHAR(10))
INSERT INTO #tblTenant VALUES(1,'Hello')
INSERT INTO #tblTenant VALUES(2,'World')
INSERT INTO #tblTenant VALUES(3,'Foo')
INSERT INTO #tblTenant VALUES(4,'Bar')
--SELECT * from #tblTenant
CREATE TABLE #tblPhone(idTenant INT,idPhoneType INT,PhoneNum BIGINT)
INSERT INTO #tblPhone vALUES(1,23,31445)
INSERT INTO #tblPhone vALUES(1,24,43123)
INSERT INTO #tblPhone vALUES(1,25,90899)
INSERT INTO #tblPhone vALUES(2,23,90937)
INSERT INTO #tblPhone vALUES(2,24,34544)
INSERT INTO #tblPhone vALUES(4,4,23455)
--select * from #tblPhone
select t.idTenant from #tblTenant t
LEFT JOIN #tblPhone p on t.idTenant=p.idTenant and p.idPhoneType=25
WHERE p.idTenant IS NULL
DROP TABLE #tblPhone
DROP TABLE #tblTenant