我在使用普通的舊SQL查詢時遇到了一些問題(大多數情況下使用ORM的缺點:))。使用SQL(單獨的表)查找具有2個條件的所有行
我有2張表,PRODUCTS
和RULES
。在表RULES
我已經定義了產品規則。我想要的是編寫一個查詢來獲得所有已定義規則的產品。
規則由2種方式定義:
- 你只能爲一個產品指定
RULE
(ProductID
具有價值,SectorID
是NULL) - 您可以使用
SectorID
更多的是一種產品指定RULE
(ProductID
是NULL)
結果需要有規則(product.ID - rule.ProductID
)的所有產品,但也包括所有產品ar e在規則表(product.SectorID - rule.SectorID
)中的部門中定義。
此外,結果不能有重複的產品(產品其通過在productId
定義RULES
或通過SectorID
)
實施例:
PRODUCTS
ID SectorID
1 1
2 1
3 1
4 2
5 3
6 3
規則
ID ProductID SectorID
1 1 NULL
4 NULL 1
5 6 NULL
預期結果
PRODUCTS with IDs : 1, 2, 3, 6
這*將*可能是最快的(給出相關指標)。將OR分解爲兩個單獨的EXISTS分支可以改善:'WHERE EXISTS(...其中p.ID = r.ProductID)或EXISTS(... WHERE p.SectorID = r.SectorID)' – wildplasser 2013-05-09 21:02:43
@wildplasser只要我可以告訴,[查詢被重寫爲無論如何](http://sqlfiddle.com/#!6/7c91c/2)與下面的連接相同的計劃。 – 2013-05-10 16:30:25