1

假设我有一个Contract包含以下字段的合同表:ContractId, ProductID, ProductType。在相同的表中,ContractId我有两种可能ProductID。所有表格都填充了两个可能的ProductType:Type1Type2.

以一种方式或另一种方式执行以下查询的原因是什么?

方式一:

 select c1.ProductID, c2.ProductID
 from Contract as c1 left join Contract as c2 on c1.ContractId=c2.ContractId
 where c1.ProductType <>'Type2'

方式二:

 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') 

感谢您的聪明回答!

4

2 回答 2

4

方式 1 更易于阅读,也更易于数据库引擎优化。

于 2013-05-14T10:24:01.157 回答
1

查询 #2 使用子查询,性能会比查询 #1 慢,后者只是检查条件而不从表中进一步获取。

于 2013-05-14T10:26:03.583 回答