2016-10-25 4 views
0

habe ich eine Datenbank aus dem folgenden Flussdiagramm:Auswahl bestimmter Informationen mit SQL

enter image description here

Bestückt nach dieser:

  1. Es gibt ein Buch ‚The Lost Tribe genannt ist ".
  2. Es gibt eine Bibliotheksfiliale namens 'Sharpstown' und eine 'Central'.
  3. Es gibt mindestens 20 Bücher in der Tabelle BOOK.
  4. Es gibt mindestens 10 Autoren in der Tabelle BOOK_AUTHORS.
  5. Jeder Bibliothekszweig hat mindestens 10 Buchtitel und mindestens zwei Kopien jedes dieser Titel.
  6. Es gibt mindestens 8 Kreditnehmer in der Tabelle Entleiher und mindestens 2 dieser Kreditnehmer haben mehr als 5 Bücher an sie ausgeliehen.
  7. Es gibt mindestens 4 Zweige in der Tabelle LIBRARY_BRANCH.
  8. Es gibt mindestens 50 Darlehen in der Tabelle BOOK_LOANS.
  9. Es muss von ‚Stephen King‘ geschrieben mindestens ein Buch sein

ich finden bin versucht, wie viele Kopien des The Lost Tribe betitelte Buch von der Bibliothek Zweig, dessen Name im Besitz ist "Sharpstown". Jetzt weiß ich, dass durch herauszufinden, was die BranchId von Sharps ist konnte ich einfach die folgende Abfrage ausführen:

SELECT No_Of_Copies FROM BOOK_COPIES WHERE BookId = 1 and BranchId = 1

Aber ist es eine Möglichkeit, unter Verwendung des tatsächlichen Namen „Sharps“ suchen?
Vielen Dank für Ihre Hilfe, ich bin ziemlich neu in SQL Server und weiß nicht, wie genau ein Benutzer mit Abfragen erhalten kann.

+0

Sie haben die Frage mit MySQL getaggt, erwähnen dann aber SQL Server. Dies sind separate Produkte und die Tags sollten die von Ihnen verwendeten Tags wiedergeben. Aber Sie sollten nach Joins suchen. –

+1

GIve es ein Versuch, Joins zu verwenden und zurückkommen, wenn Sie es versucht haben. – Alfabravo

Antwort

0

Für Bibliothek Zweig, könnten Sie IN

SELECT No_Of_Copies FROM BOOK_COPIES 
WHERE BookId = 1 
    AND BranchId IN (SELECT BranchId 
        FROM library_branch 
        WHERE BranchName = 'Sharpstown'); 
+0

Super! Vielen Dank, dass Sie das ab sofort nutzen werden. –

0

Sicher ist es möglich.

Es wird in etwa so aussehen, wenn Sie correlated subquery wollen verwenden:

SELECT No_Of_Copies FROM BOOK_COPIES 
WHERE BranchId IN (
    SELECT BranchId FROM LIBRARY_BRANCH WHERE BranchName = "Sharpstown") 
AND BookId IN (
    SELECT BookId FROM BOOK WHERE Title = "The Lost Tribe") 

Oder könnten Sie schließt sich als @Sachin in eine andere Antwort vorgeschlagen.

0

Sie für diese Anforderung Join verwenden verwenden. Sie haben BOOK_COPIES mit LIBRARY_BRANCH und BOOK Tabelle verbinden, dann können Sie durch BranchName

SELECT No_Of_Copies 
FROM BOOK_COPIES inner join LIBRARY_BRANCH 
on BOOK_COPIES .BranchId = LIBRARY_BRANCH.BranchId 
inner join BOOK 
on BOOK_COPIES.BookId = BOOK.BookId 
WHERE BOOK.Title = "The Lost Tribe" and LIBRARY_BRANCH.BranchName = "Sharpstown" 
+0

Ich wusste nicht, dass ich Joins so benutzen könnte. Vielen Dank! –

+0

Manchmal ist 'Join' schneller als Unterabfragen – Sachin

0

versuchen, diese zu finden.

  SELECT No_Of_Copies FROM BOOK_COPIES 
      WHERE BranchId in 
      (
      select BranchId from library_branch 
      where branchname like '%Sharpstown%' 
      ) 
      and BookId in 
      (
      select BookId 
      from book where title like 
      '%The Lost Tribe%' 
      ) 
0
SELECT No_Of_Copies FROM BOOK_COPIES 
LEFT JOIN LIBRARY_BRANCH on BOOK_COPIES.BranchId=LIBRARY_BRANCH.BranchId 
WHERE BookId = 1 and BranchName = 'Sharpstown' 
0
SELECT No_Of_Copies 
    FROM BOOK_COPIES 
     WHERE BookId=(SELECT BookId FROM BOOK WHERE Title="The Lost Tribe") 
      AND branchid=(SELECT BranchId FROM LIBRARY_BRANCH WHERE BranchName="Sharpstown") 

Verwenden Title="The Lost Tribe", wenn Sie für genaue Übereinstimmung suchen und es wird schneller als Title LIKE "%The Lost Tribe%"

0

Im Fall verwenden Sie das Buch ID dynamisch als auch erhalten möchten, können Sie innere verwenden Beitreten.

SELECT BC.NOOFCOPIES FROM 
BOOK_COPIES BC INNER JOIN BOOK B ON B.BOOKID = BC.BOOKID 
       INNER JOIN BRANCH BR ON BC.BRANCHID = BR.BRANCHID 
      WHERE BR.BRANCHNAME = 'SHARPSTOWN'; 
Verwandte Themen