Как проверить, является ли один подзапрос подмножеством другого подзапроса в Oracle SQL? - PullRequest
0 голосов
/ 11 октября 2019

Можно ли создать запрос в Oracle SQL, который выбирает только такие элементы, что подзапрос является подмножеством другого подзапроса?

Например:

select Foo.f
from Foo
where

    --The set of all Bar.b's where Foo.f=Bar.b
    (select Bar.b
    from Bar
    where Foo.f = Bar.b)

    contains 

    --The set of all Bar.b's where Bar.c=10
    (select Bar.b
    from Bar
    where Bar.c=10);

Или «выбрать все Foo.f, где все Bar.b с Bar.c = 10 - это подмножество всех Bar.b, где Foo.f =Bar.b "?

[РЕДАКТИРОВАТЬ] Так что здесь может быть лучший способ выразить то, что я спрашиваю. Если в операторе where есть два подзапроса, которые возвращают подмножества A и B, как я могу проверить, что B является подмножеством A. Итак, переписать исходный пример более общим способом:

Select Foo.f
from Foo
where
    --Subset A
    (select ...)

    ?? Some set comparison operator

    --Subset B
    (select ...)

Ответы [ 3 ]

0 голосов
/ 11 октября 2019

Я думаю, что простой AND в запросе EXISTS должен работать.

select foo.f
from Foo  where exists ( select 1 from Bar  where Foo.f = Bar.b and Bar.c = 10 )
0 голосов
/ 11 октября 2019

Итак, я думаю, что нашел ответ. Во-первых, обратите внимание, что если B ⊆ A, то BA = ∅

Затем, используя только операторы множеств SQL, я могу сделать

select Foo.f
from Foo
where
    not exists (
        --Subset B
        (select...)

        minus

        --Subset A
        (select...));
0 голосов
/ 11 октября 2019

Да, вы написали довольно много кода для чего-то, что я интерпретировал как простой

select Foo.f
from Foo join Bar on Foo.f = Bar.b
where Bar.c = 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...