2016-10-18 6 views
0

Bei Datenbank-Schema:Überprüfen Sie, ob Zeile in anderen Tabelle vorhanden

Part(P#, PName, Producer, Year, Price) 
Customer(C#, CName, Province) 
Supply(S#, P#, C#, Quantity, Amount, Date) 

Wie würde ich eine Abfrage erstellen Namen und Provinzen der Kunden zur Liste, die keine Apple-Produkte gekauft haben?

ich habe:

SELECT 
    b.cname, 
    b.province 
FROM 
    part c, 
    customer b, 
    supply a 
WHERE 
    c.PID = a.PID 
    AND b.CID = a.CID 
    AND c.producer != 'Apple' 

Doch diese alle Kunden gibt, die etwas anderes als ein Apple-Produkt gekauft. Also muss ich in der Lage sein, mit anderen Aufzeichnungen zu vergleichen.

+0

Hausaufgaben? Fügen Sie Beispieltabellendaten und das erwartete Ergebnis (sowie formatierten Text) hinzu. Zeigen Sie auch Ihren aktuellen Abfrageversuch an. – jarlh

Antwort

0

hier, die Kunden, die Apple-Produkte nicht gekauft haben

Select cname, Province 
From Customer c 
Where not exists 
    (Select * from Supply s 
     join Part p on p.pId = s.pId 
    Where CId = c.CId 
     and p.Producer = 'Apple') 

und hier wählen die Kunden, die Apple-Produkte nur erworben haben:

Select cname, Province 
From Customer c 
Where exists 
    (Select * from Supply s 
     join Part p on p.pId = s.pId 
    Where CId = c.CId 
     and p.Producer = 'Apple') 
and Not exists -- <- filter out the customers without an Apple product 
    (Select * from Supply n 
     join Part nap on nap.pId = n.pId 
    Where CId = c.CId 
     and nap.Producer != 'Apple') 
+0

Wie wäre es mit dieser Abfrage, die ich ändern müsste, um Kunden abzurufen, die nur Apple-Produkte gekauft haben? – Shpanders

+0

Machen Sie die Klausel 'Not Exists' für Produkte, die 'Apple' sind, eine 'Exists'-Klausel, und fügen Sie eine weitere 'Not Exists'-Klausel für Produkte hinzu, die * nicht * Apple sind –

Verwandte Themen