#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>