假设我有一个包含以下字段的合同Contract
表:ContractId
,ProductID
,ProductType
。在相同ContractId
的表格中,我有两个ProductID
。所有表格都填充了两个ProductType
:Type1
和Type2
。
以一种方式或另一种方式执行以下查询的原因是什么?
方式1:
select c1.ProductID, c2.ProductID
from Contract as c1 left join Contract as c2 on c1.ContractId=c2.ContractId
where c1.ProductType <>'Type2'
方式2:
select c1.ProductID, c2.ProductID
from Contract as c1 left join Contract as c2 on c1.ContractId=c2.ContractId
where c1.ContractId not in (select ContractId from Contract where ProductType = 'Type2')
感谢您的明智答案!
答案 0 :(得分:4)
方式1更容易阅读,更容易让数据库引擎进行优化。
答案 1 :(得分:1)
查询#2使用子查询,性能将比查询#1慢,后者只是检查条件而无需从表中进一步获取。