2017-01-16 5 views
0

Я хотел бы получить пересечение одной таблицы. Мой стол состоит из продуктов, которые появляются на нескольких рынках. Как я могу получить продукты, которые находятся в местах A и B (например, это яблоко)?Пересечение из одной таблицы

product  market 
apple  location A 
apple  location B 
orange  location C 
+0

Какую версию SQL вы используете? –

+0

Я использую PL/SQL 11.2 Oracle Database 11g –

ответ

1

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

SELECT product 
FROM yourTable 
WHERE market IN ('location A', 'location B') 
GROUP BY product 
HAVING COUNT(DISTINCT market) = 2 

Другая возможность заключается в использовании условной агрегации и подсчитать количество раз, которое появляется данный рынок с каждым продуктом:

SELECT product 
FROM yourTable 
GROUP BY product 
HAVING SUM(CASE WHEN market = 'location A' THEN 1 ELSE 0 END) > 0 AND -- appears in A 
     SUM(CASE WHEN market = 'location B' THEN 1 ELSE 0 END) > 0  -- appears in B 
+1

Спасибо за ваши усилия! Это сделал трюк! –

0

You может достичь этого через «ВНУТРЕННУЮ СОЕДИНЕНИЕ», как показано ниже

select t.product 
from product t 
inner join 
     (select product from product where market = 'location A') tt on t.product = tt.product 
where market = 'location B'