2012-04-03 10 views
1

Ich habe eine Datenbank basierend auf einem Bibliothekssystem und ich versuche, meine Kenntnisse über MYSQL-Abfragen zu erweitern. Ich möchte versuchen, die Namen von Kreditnehmern aufzulisten, die alle Buchtitel in der Datenbank ausgeliehen haben.MYSQL Auswahl von Elementen, die alles in einer anderen Abfrage enthält

Die Anforderung, die ich brauche nach unten abzustreifen ist

SELECT b.BorName 
FROM Borrower b 
JOIN Loan l ON l.BorId = b.BorId 
JOIN BookCopy bc ON bc.BcId = l.BcId 
JOIN BookTitle bt ON bt.BtId = bc.BtId 

Und ich denke, ich brauche bt.BtName zu verwenden, die die Namen jedes Buch in der Abfrage oben sowie die Sub-Abfrage ist SELECT bt.BtName FROM BookTitle bt aber ich don‘ t irgendwelche Wörter oder Fragen, um dies mit der gesamten Liste zu tun.

Ich muss die erste Tabelle mit jeder Zeile in der zweiten Abfrage vergleichen, aber noch einen Weg finden, dies zu tun.

+0

Warum glauben Sie, dass Sie 'BtName' in der Abfrage verwenden müssen? –

+0

Nun ich denke, ich könnte entweder "BtName" oder "BtId" verwenden, beide sollten das gleiche Ergebnis haben. –

+0

Haben Sie auch eine Spalte mit Titel in der 'BookCopy'? –

Antwort

1

Nach dem Sammeln von einzigartigen Kreditnehmer-Titel-Kombinationen (mit DISTINCT), können Sie diese Kreditnehmer mit der Anzahl der booktitles entspricht der Gesamtzahl der booktitles identifizieren, die GROUP BY und HAVING bestehen mit:

SELECT BorName FROM (
    SELECT DISTINCT b.BorName, bt.BtId 
    FROM Borrower b 
    JOIN Loan l ON l.BorId = b.BorId 
    JOIN BookCopy bc ON bc.BcId = l.BcId 
    JOIN BookTitle bt ON bt.BtId = bc.BtId 
) borrowers_titles 
GROUP BY BorName 
HAVING Count(*) IN (SELECT Count(*) FROM BookTitle) 
0

Was ist mit:

das bekommt Sie alle Namen und Bücher geliehen, gruppiert (oder geordnet nach) den Namen des Kreditnehmers. Jetzt klang es so, als wolltest du die Namen der Leute, die jedes Buch in der Bibliothek geliehen haben? Wenn ja:

SELECT b.BorName 
Borrower as b 
WHERE 
    (SELECT count(distinct BtId) FROM BookTitle) = 
     (SELECT count(distinct bc.BcID) FROM BookCopy as bc WHERE bc.BorID = b.BorID) 
Verwandte Themen