SQL JOIN - 在一对多关系中仅选择满足所有条件的记录

SQL JOIN - Selecting only records that meet ALL criteria in a 1-to-many relationship

这是一个 sybase 数据库,它遵循 t-sql 语法(same/similar 到 MSSQL)。

我有2张桌子,箱子和保险。

CASES              insurance
-----              ---------
casenum            ins_id
                   date_resolved
                   case_num

每个案例编号都有多个关联的保险条目,并且每个保险条目都有一个日期解决字段。

我想做的是 return 只有所有相关保险条目的案例编号 date_resolved = null。
我得到的是空的案例编号和相关的保险条目。

例如,如果一个案件编号有 3 个保险条目,其中 2 个条目为空 date_resolved,但 1 个 的值在 date_resolved,我的查询将 return 个案编号,因为这 2 个条目为空。

这是我尝试过的方法:

select casenum
from cases
left join (select date_resolved from insurance where date_resolved is null) ins
on ins.case_num = cases.casenum

select casenum
from cases
inner join insurance on cases.casenum = insurance.case_num
where insurance.date_resolved is null

如果这是初学者的错误,我很抱歉,我搜索了论坛并发现了许多类似的问题,但是 none 似乎解决了我的问题。

编辑 - 使用下面提供的答案之一,我将其合并到我的查询中并最终得到类似这样的结果(我相信它有效):

select casenum, *other stuff*
from cases
inner join (select i.case_num from insurance i group by i.case_num having max(date_resolved) is null) ins
on ins.case_num = cases.casenum
where *other stuff from cases table*
and *more stuff from cases table*

非常感谢!

一种方法是聚合:

select i.case_num
from insurance i
group by i.case_num
having max(date_resolved) is null;

或者,您可以使用 not exists:

select c.*
from cases c
where not exists (select 1
                  from insurance i
                  where i.case_num = c.case_num and i.date_resolved is not null
                 );

请注意,这些等同。在 insurance.

中没有行的第二个 returns cases