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:一般来说,情况并非如此。有了正确的索引,相关子查询通常效率更高。