2016-11-06 31 views
0

Wir haben dieses Schema für eine „Bestellung“ genannt Tabelle angegeben:Finding Elemente, die in „jeder“ Kategorie in einer Spalte erscheinen

CREATE TABLE country(
    orderID VARCHAR, 
    customerID INTEGER, 
    shipperID VARCHAR 
) 

Hier ist eine Visualisierung dieser Tabelle, aus w3school SQL Tutorial genommen:

enter image description here

ich möchte die CustomerIDs erhalten, die von jedem ShipperID mindestens einmal bestellt haben.

Eine Möglichkeit wäre, zu erkennen, dass es nur drei eindeutige shipperIDs gibt (1, 2 und 3), so dass wir drei kartesische Produkte ausführen und die customerIDs auf diese Weise identifizieren können. Allerdings möchte ich die Abfrage so schreiben, dass es egal ist, wie einzigartig viele shipperIDs sind.

Mit relationaler Algebra kann dies ziemlich einfach mit Division durchgeführt werden. Gibt es eine einfache Möglichkeit, eine solche Abfrage in SQL durchzuführen?

+1

Ist die Frage zu Standard SQL, SQL-Server oder PostgreSQL? – Marth

+0

http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/285557#285557 –

+0

Mein Fehler, Dies ist für PostgreSQL. –

Antwort

1

Könnte man eine Gruppe von .. verwenden kann, und ein subselect

select CustomerID 
from Orders 
group by CustomerID 
having count(distinct ShipperID) = (select count(distinc ShipperID) from Orders) 

Die Gruppe, die durch die Anzahl der ShipperID gibt für jeden CustomerID .. das mit zu überprüfen, ob dies auf die insgesamt die gleiche ist ShipperID

Verwandte Themen