У меня есть три таблицы, которые выглядят так:
PROD
Prod_ID|Desc
------------
P1|Foo1
P2|Foo2
P3|Foo3
P4|Foo4
...
RAM
Ram_ID|Desc
------------
R1|Bar1
R2|Bar2
R3|Bar3
R4|Bar4
...
PROD_RAM
Prod_ID|Ram_ID
------------
P1|R1
P2|R2
P3|R1
P3|R2
P3|R3
P4|R3
P5|R1
P5|R2
...
Между PROD и RAM существует отношение «многие ко многим», описываемое таблицей PROD_RAM .
Учитывая Ram_ID
набор, такой как (R1,R3)
Я хотел бы найти все PROD
, которые имеют ровно ONE или ALL RAM
данного набора ,
Учитывая, (R1,R3)
должно возвращаться, например, P1
, P4
и P5
; P3
не должен быть возвращен, поскольку имеет R1
и R3
, но также R2
.
Какой самый быстрый запрос для получения всех PROD
, имеющих ровно ONE или ALL из Ram_ID
данного RAM
набора?
EDIT:
Таблица PROD_RAM
может содержать отношения больше чем 1-> 3, поэтому «жестко закодированные» проверки для count = 1 OR = 2 не являются жизнеспособным решением.