Veröffentlicht 26. April 20187 j 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.
26. April 20187 j Autor 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.
26. April 20187 j 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.
26. April 20187 j Autor 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.
26. April 20187 j 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
26. April 20187 j Autor Geschafft SELECT Count(Bewohnernr) FROM Bewohner JOIN Dorf ON Bewohner.dorfnr=Dorf.dorfnr WHERE Bewohner.geschlecht = 'w' AND Dorf.name='Zwiebelhausen'
26. April 20187 j 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 20187 j von pr0gg3r
26. April 20187 j 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.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.