普通の古いSQLクエリ(ほとんどの場合、ORMを使用するという欠点)にはいくつか問題があります。SQLを使用して2つの条件を持つすべての行を検索する(別のテーブル)
私はPRODUCTS
とRULES
の2つのテーブルを持っています。テーブルRULES
には、製品のルールが定義されています。私が望むのは、ルールを定義したすべての製品を取得するためのクエリを書くことです。あなたはSectorID
を使用して、よりその1つの製品に対してRULE
を指定することができます
ProductID
(SectorID
はNULLで、ProductID
が値を持っている)あなたは1つの製品だけのためRULE
を指定することができます
- :
ルールは2つの方法で定義されていますはNULLです)
結果には、ルール(product.ID - rule.ProductID
)を持つすべての製品が必要ですが、arルールテーブル(product.SectorID - rule.SectorID
)にあるセクタで定義されます。
PRODUCTS
ID SectorID
1 1
2 1
3 1
4 2
5 3
6 3
RULES:
また、結果は、重複した製品(RULES
またはSectorID
によってproductId
によって定義されている製品)
例を持つことはできません
ID ProductID SectorID
1 1 NULL
4 NULL 1
5 6 NULL
期待される結果
PRODUCTS with IDs : 1, 2, 3, 6
これはおそらく最も速いでしょう(関連するインデックスが与えられています)。 ORを2つの独立したEXISTSレッグに分割すると、物事が改善されます: 'WHERE EXISTS(... where p.ID = r.ProductID)またはEXISTS(... WHERE p.SectorID = r.SectorID)' – wildplasser
@wildplasser下の結合と同じ計画で、[クエリは、とにかく結合として書き直されます](http://sqlfiddle.com/#!6/7c91c/2)と言います。 –