如何从两个不同的表中获取记录

问题描述 投票:0回答:3

我有两个1 to M关系的数据库表,如下所示

CaseMaster(caseId,case#,title,....)

CaseStages(stageId,caseId,stageName,....,lawyerName,...)

上述关系意味着每个案例都经历了多个阶段(初步,上诉,执行等)。在每个阶段,他们可以是不同的或没有律师。我想列出从未有过任何阶段律师的所有案件(不是阶段)。

我尝试在caseId上使用group by语句执行此操作,但不知道如何仅获取那些从未有过律师的案例。

enter image description here

sql sql-server
3个回答
1
投票

您可以使用WHERE NOT EXISTS编写查询,如下所示。

SELECT cm.caseid, 
       cm.[case#], 
       cm.title 
FROM   casemaster cm 
WHERE  NOT EXISTS (SELECT 1 
                   FROM   casestages cs 
                   WHERE  cs.caseid = cm.caseid 
                          AND cs.lawyername IS NOT NULL) 

如果你真的想用GROUP BY来做,可以像下面这样做。

select cm.caseid,cm.title
from CaseMaster cm
inner join CaseStages cs on cs.caseid=cm.caseid
group by cm.caseid,cm.title
having sum(case when cs.lawyerName is null then 0 else 1 end)=0

Online Demo


0
投票

不要用

 select t1.* from casemaster t1
 where  caseid not in ( select caseid from casestages t2 where 
                      t2.laywername is not null)

0
投票

在查询中使用“distinct”关键字以避免重复。

© www.soinside.com 2019 - 2024. All rights reserved.