Правильный Oracle SQL для идентификации первичных ключей, которые имеют общую комбинацию значений

#sql #oracle

Вопрос:

Скорее всего, существует простое решение этого вопроса, но я застрял и не могу найти другой вопрос, подобный этому, который был опубликован. Итак, у меня есть таблица ( SUPPLIERS ), которая идентифицирует магазины и их поставщиков.

StoreID Поставщик ИД
123456 001
123456 002
123456 003
234567 001
345678 001
345678 002
456789 001
456789 004

Мне нужно определить магазины, в которых указанный поставщик использовался в сочетании с указанной группой поставщиков. Итак, из приведенной выше SUPPLIERS таблицы мне нужно получить все идентификаторы магазинов 001 , с которыми использовался поставщик 002 И/ИЛИ 003 .

Я пытался…

 SELECT
   DISTINCT StoreID
FROM
   SUPPLIERS
WHERE 
     SupplierID = 001
AND (SupplierID = 002
      or
     SupplierID = 003);
 

…но я возвращаю не то, чего ожидал. Из вышесказанного я бы ожидал:

StoreID
123456
345678

Заранее спасибо, что уделили мне время.

Ответ №1:

Вот один из вариантов:

 SQL> select distinct a.storeid
  2  from suppliers a
  3  where a.supplierid = '001'
  4    and exists (select null
  5                from suppliers b
  6                where b.storeid = a.storeid
  7                  and b.supplierid in ('002', '003')
  8               );

   STOREID
----------
    123456
    345678

SQL>