使用SQL查找具有2个条件的所有行(单独的表)

rjo*_*vic 5 sql

我对普通的旧SQL查询有一些问题(大多数时候使用ORM的缺点:)).

我有两张桌子,PRODUCTS而且RULES.在表格中,RULES我已经定义了产品规则.我想要的是编写一个查询来获取所有已定义规则的产品.

规则由两种方式定义:

  1. 您只能指定RULE一个产品(ProductID有值,SectorID为NULL)
  2. 您可以使用指定RULE更多的产品SectorID(ProductID为NULL)

结果需要包含所有具有rule(product.ID - rule.ProductID)的产品,以及所有在rules(product.SectorID - rule.SectorID)中的扇区中定义的产品.

此外,结果不能有重复的产品(由productIdin RULES或by 定义的产品SectorID)

例:

产品

ID  SectorID
1   1
2   1
3   1
4   2
5   3
6   3
Run Code Online (Sandbox Code Playgroud)

规则

ID ProductID SectorID
1  1         NULL
4  NULL      1
5  6         NULL
Run Code Online (Sandbox Code Playgroud)

预期结果

PRODUCTS with IDs : 1, 2, 3, 6
Run Code Online (Sandbox Code Playgroud)

cmd*_*cmd 4

我能想到的最简单的方法,但不一定是最快的。

SELECT * FROM products AS p WHERE
       EXISTS (SELECT * FROM rules AS r WHERE p.ID = r.ProductID OR p.SectorID = r.SectorID)
Run Code Online (Sandbox Code Playgroud)