2017-01-16 3 views
0

Ich möchte eine Schnittmenge von einer Tabelle erhalten. Meine Tabelle besteht aus Produkten, die in verschiedenen Märkten erscheinen. Wie kann ich die Produkte bekommen, die an den Standorten A und B liegen (zum Beispiel dieser Apfel)? HierKreuzung von einer Tabelle

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

Welche Version von SQL verwenden Sie? –

+0

Ich benutze PL/SQL 11.2 Oracle Datenbank 11g –

Antwort

1

ist eine Option:

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

Eine andere Möglichkeit wäre bedingte Aggregation zu verwenden und die zählt, wie oft die in einem bestimmten Markt mit jedem Produkt angezeigt:

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

Danke für Ihre Mühe! Das hat den Trick gemacht! –

0

Sie kann dies durch 'INNER JOIN' erreichen, wie unten unter

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'