Sql 根据条件联接一对多关系以排除某些行

Sql 根据条件联接一对多关系以排除某些行,sql,join,Sql,Join,我在客户和客户合同表之间有一对多关系 id|CustomerID|StatusID 1|1 |2 2|2 |1 3|1 |2 4|1 |3 客户表 id|name 1|Jared 2|Taylor 客户合同表 id|CustomerID|StatusID 1|1 |2 2|2 |1 3|1 |2 4|1 |3 现在,我想创建一个视图,只检索

我在客户和客户合同表之间有一对多关系

id|CustomerID|StatusID
 1|1         |2
 2|2         |1
 3|1         |2
 4|1         |3
客户表

id|name
 1|Jared  
 2|Taylor
客户合同表

id|CustomerID|StatusID
 1|1         |2
 2|2         |1
 3|1         |2
 4|1         |3
现在,我想创建一个视图,只检索没有 客户合同中的最后状态为2

预期结果

id|CustomerID
 1|2        
检索CustomerID 2是因为其上一个状态不等于2使用不存在:

我想创建一个视图,仅检索客户合同中最后状态为2的客户

您可以使用相关子查询检索上一个状态,并将其用于筛选:

create view customer_view as
select c.*
from customer c
where (
    select statusid 
    from customercontracts cc 
    where cc.customerid = c.customerid 
    order by id desc 
    limit 1
) <> 2

我不能用join实现同样的效果吗?@r\u via。是的,但这几乎是将您要求的内容直接翻译成SQL。我更新了我的问题。难道join的性能不是更好吗?@r\u via。否。相关子查询的性能好吗?我有一个非常大的表,我想用最好的方法来提高性能,你需要一个关于customercontractcustomerid,id,statusid的索引。我已经有了,现在我正在对它进行研究,我发现使用左外连接在performance@r_via:一般来说,情况并非如此。有了正确的索引,相关子查询通常效率更高。