König Geschrieben 26. April 2018 Teilen Geschrieben 26. April 2018 Hallo, ich bräuchte Hilfe bei dem Spiel SQL Island. Ich zitiere: "Hallo, Dirty Dieter hält den Piloten im Haus seiner Schwester gefangen. Soll ich dir verraten, wie viele Frauen es in Zwiebelhausen gibt? Ach was, das kannst du schon selbst herausfinden! (Hinweis: Frauen erkennt man an geschlecht = 'w')" Es gibt folgende Tabellen: DORF (dorfnr, name, haeuptling) BEWOHNER (bewohnernr, name, dorfnr, geschlecht, beruf, gold, status) GEGENSTAND (gegenstand, besitzer) Danke für alle Antworten. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Enno Geschrieben 26. April 2018 Teilen Geschrieben 26. April 2018 Wie wäre denn dein Ansatz? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
König Geschrieben 26. April 2018 Autor Teilen Geschrieben 26. April 2018 vor 4 Minuten schrieb Enno: Wie wäre denn dein Ansatz? Ich hatte folgendes versucht: SELECT COUNT(*) FROM Bewohner.Dorf WHERE Bewohner.Geschlecht = 'w' AND Dorf.Name = 'Zwiebelhausen' Scheint aber nicht richtig zu sein. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
arlegermi Geschrieben 26. April 2018 Teilen Geschrieben 26. April 2018 Was soll Zitat Bewohner.Dorf denn bedeuten? Meintest du Bewohner,Dorf? Das ist zwar syntaktisch korrekt, aber inhaltlich verkehrt (weißt du, was das für ein Join ist, den du da ausführst?). Geh das ganze doch in Schritten an: 1) Selektiere alle Frauen (SELECT * FROM Bewohner WHERE geschlecht = 'w') 2) Selektiere die ID des Dorfes Zwiebelhausen (SELECT dorfnr from Dorf WHERE name = 'Zwiebelhausen') 3) Kombiniere die beiden Anfragen (... WHERE (1) AND ... (2)) Das ist natürlich nicht perfekt und lässt sich eleganter lösen. Aber als erster Schritt sicher ganz hilfreich. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
König Geschrieben 26. April 2018 Autor Teilen Geschrieben 26. April 2018 vor 4 Minuten schrieb arlegermi: Meintest du Bewohner,Dorf? Tippfehler, meinte ich natürlich. vor 4 Minuten schrieb arlegermi: Geh das ganze doch in Schritten an: Das wär dem Spiel zu einfach, das sollte alles in einer Abfrage stattfinden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goulasz Geschrieben 26. April 2018 Teilen Geschrieben 26. April 2018 Hallo @König! Du brauchst Datensätze aus den Tabellen Dorf und Bewohner. Du verknüpfst die Tabellen über "dorfnr". Für die Wahl des richtigen JOINs lasse ich dir diesen exzellenten Artikel da. Der sollte helfen. https://blog.codinghorror.com/a-visual-explanation-of-sql-joins/ Viel Spaß damit und Gruß, Goulasz König reagierte darauf 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
König Geschrieben 26. April 2018 Autor Teilen Geschrieben 26. April 2018 Geschafft SELECT Count(Bewohnernr) FROM Bewohner JOIN Dorf ON Bewohner.dorfnr=Dorf.dorfnr WHERE Bewohner.geschlecht = 'w' AND Dorf.name='Zwiebelhausen' Goulasz, arlegermi und Dan96 reagierten darauf 3 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pr0gg3r Geschrieben 26. April 2018 Teilen Geschrieben 26. April 2018 (bearbeitet) vor 1 Stunde schrieb König: SELECT COUNT(*) FROM Bewohner.Dorf WHERE Bewohner.Geschlecht = 'w' AND Dorf.Name = 'Zwiebelhausen' Sieht nicht so schlecht aus, nur gibt es kein "Bewohner.Dorf". Du willst von Bewohner und Dorf selektieren, also "Bewohner, Dorf" und dann noch verknüpfen: SELECT COUNT(*) FROM Bewohner, Dorf WHERE Bewohner.Geschlecht = 'w' AND Dorf.name = 'Zwiebelhausen' AND Dorf.dorfnr = Bewohner.dorfnr Es gibt bei Joins zwei Schreibweisen: implizit (dein erster Code) und explizit (dein zweiter Code, also das Join ausgeschrieben). Bearbeitet 26. April 2018 von pr0gg3r Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
arlegermi Geschrieben 26. April 2018 Teilen Geschrieben 26. April 2018 vor 3 Stunden schrieb König: Das wär dem Spiel zu einfach, das sollte alles in einer Abfrage stattfinden. Daher ja auch Schritt 3 vor 3 Stunden schrieb arlegermi: 3) Kombiniere die beiden Anfragen (... WHERE (1) AND ... (2)) Ich persönlich finde es bei komplexen Anfragen immer hilfreich, diese erst einmal einzeln zu erfassen und am Ende dann zusammenzuführen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.