2017-05-25 7 views
-1

ERD ImageMySQL einfache Abfrage über Join

Ich bin Univ. D

Ich entwerfe die einfache Buchhandlung Datenbank, aber es ist schwer für mich Abfrage zu schreiben :(Wie ich wie unten mit dem ERD drucken

[: ersten Student aus Koreanisch, so traurig zu meiner großen Englisch Fähigkeit? ISBN, Titel, writer.name, Seite, Preis, publisher.name, publish_date, Thema, Bericht]

Wenn Autoren und Themen sind 2 und mehr, und dann alle Druck Tupel. Würden Sie mir helfen, Jungen?

+1

Bitte fügen Sie die Tabelle Details direkt in Frage und nicht als Bild. Geben Sie uns auch Beispieleingabe und erwartete Ausgabe. – SMA

+0

was hast du bisher probiert? – WhatsThePoint

+0

Siehe: [Warum sollte ich einen MCVE für eine scheinbar einfache SQL-Abfrage bereitstellen?] (Https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve -für-was-scheint-mir-eine-sehr-einfache-sql-abfrage) – Strawberry

Antwort

0

Nur ein schneller Mock-up. Ich habe Annahmen über die Tabellenstruktur gemacht. Drei Tische, eine für das Buch, eine für den Autor und eine für Rezensionen.

Ich habe einen linken Join verwendet, da ich angenommen habe, dass Sie basierend auf dem Buch abfragen würden, wobei die ISBN die Tabellen-Unique-Key ist. Joins können ein wenig Zeit brauchen, um herauszufinden, wenn Sie Hilfe mit Joins benötigen, kann diese Seite helfen. https://www.techonthenet.com/mysql/joins.php

select 
     boo.ISBN, 
     boo.title, 
     au.author_name, 
     boo.pages, 
     boo.price, 
     boo.publisher, 
     boo.publish_date, 
     boo.genre, 
     rev.review 

     from books as boo 
      left join author as au 
       on boo.authorID = au.authorID 
      left join reviews as rev 
       on rev.ISBN = boo.ISBN 
     where boo.ISBN = XXXX; 

Wenn Sie Hilfe benötigen selbst die ERD zu machen, gibt es eine andere Stack Artikel, der, wenn ich die erste Frage falsch verstanden helfen kann this link here

1

Es ist eine einfache Frage, wenn Sie einen Wert von Join-Tabellen finden möchten, wie eine prozedurale Abfrage:

brauchen customer.address, Basistabelle: Buch so: Buch beitreten Beitritt -> beitreten Kunden -> fangen Sie den Wert # es wird hier sterben, lässt auf einen anderen Wert.

topic.name benötigen, Basistabelle: Buch so: book Thema beitreten -> den Wert #

nicht mehr weiter zum nächsten Fang, können Sie die Abfrage tun:

select 
    book.ISBN 
    book.title 
    book.price 
    book.publisher_date 
    writer.name as WriterName /* if you need an alias */ 
    publisher.name as PublisherName /* if you need an alias */ 
    topic.name as TopicName /* if you need an alias */ 
    purchase.review 
    /* bonus */ 
    customer.phone_number 

from book 
    left join writer on writer.cook_id = book.id 
    left join topic on topic.cook_id = book.id 
    left join publisher on publisher.id = book.publisher_id 
    left join purchase on purchase.book_id = book.id /* first */ 
     left join customer on purchase.customer_id = customer.id /* second */ 

ich denke, es funktioniert. :)

+0

Du bist so genial !!!! : D danke !! – dhpark

+0

Könnte ich Ihnen noch eine Frage stellen? Ich möchte wie das drucken [writer_name, PUBLISHER_NAME, count] Zählung, wie viele Bücher, die Schriftsteller in Verleger veröffentlichen und meine Frage ist ... \t writer.name als writer_name wählen, \t publisher.name als PUBLISHER_NAME von \t Schriftsteller Natur Buch kommen, Verleger \t \t wo book.publisher_id = publisher.id \t \t Sortieren nach Schreiber_Name – dhpark

+0

Ihre Zählung (Herausgeber.id), aber es ist richtig, wenn Sie mehr als einen Publisher auflisten müssen Sie eine Gruppe von publisher.id, und für den Beitritt, wenn das "von" ist der Schriftsteller, um Publisher zu erreichen, müssen Sie Schriftsteller -> Buch beitreten -> Herausgeber – israel