我有两个1 to M
关系的数据库表,如下所示
CaseMaster(caseId,case#,title,....)
CaseStages(stageId,caseId,stageName,....,lawyerName,...)
上述关系意味着每个案例都经历了多个阶段(初步,上诉,执行等)。在每个阶段,他们可以是不同的或没有律师。我想列出从未有过任何阶段律师的所有案件(不是阶段)。
我尝试在caseId上使用group by
语句执行此操作,但不知道如何仅获取那些从未有过律师的案例。
您可以使用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
不要用
select t1.* from casemaster t1
where caseid not in ( select caseid from casestages t2 where
t2.laywername is not null)
在查询中使用“distinct”关键字以避免重复。