1

Contract次のフィールドを持つ契約のテーブルがあるとします: ContractIdProductIDProductType。同じの表には、ContractId2つの可能性がありProductIDます。すべてのテーブルには、 と の 2 つの可能性が設定されていProductTypeます。Type1Type2

次のクエリを何らかの方法で実行する理由は何ですか?

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

賢明なご回答ありがとうございます。

4

2 に答える 2

4

方法 1 は読みやすく、DB エンジンの最適化も容易です。

于 2013-05-14T10:24:01.157 に答える
1

クエリ #2 はサブクエリを使用するため、クエリ #1 よりもパフォーマンスが低下します。クエリ #1 は、テーブルからそれ以上フェッチせずに条件をチェックするだけです。

于 2013-05-14T10:26:03.583 に答える