我在使用普通的旧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