netzniesserin Geschrieben 24. Februar 2022 Geschrieben 24. Februar 2022 hi, hat jemand evtl. noch eine andere Lösung für mich: GA1 FIAE 2021 Sommer Handlungsschritt 5 d sql Denn das mit dem insert into mitgliedarchiv where - das kann m.M. in der vorgeschlagenen Lösung nicht funktionieren. Was meint ihr? Zitieren
alex123321 Geschrieben 24. Februar 2022 Geschrieben 24. Februar 2022 Poste doch die Aufgabe und Lösung. Für einzelne Aufgaben ist das soweit ich weiß erlaubt. Zitieren
netzniesserin Geschrieben 24. Februar 2022 Autor Geschrieben 24. Februar 2022 Aufg: Erstelle eine neue Tabelle MitgliedArchiv. Transferiere alle Mitglieder, die kein Angebot eingestellt haben, in diese Tabelle. Lösche diese inaktiven Mitglieder aus der Tabelle Mitglied! ok, create table sollte kein Problem sein 🙂: CREATE TABLE MitgliedArchiv (idmitglied INT Primary Key, mitgliedName VARCHAR(30),..., gebDat DATE, fuehrungsZeugnis BOOLEAN); AAABeeer: die (einzige) vorgeschlagene Lösung für die Korrektoren kann so nicht richtig sein (oder hat jemand zufällig noch eine Lösung vorliegen??): INSERT INTO MitgliedArchiv WHERE (SELECT COUNT(idangebot) FROM Angebot WHERE mitgliedid = idmitglied) = 0; Genauso die Delete-Anweisung, die kann so auch nicht richtig sein: DELETE FROM Mitglied WHERE (SELECT COUNT(idangebot) FROM Angebot WHERE mitgliedid = idmitglied) = 0; Würde mich riesig freuen, wenn jemand mir hier weiterhelfen kann. 🙂 Zitieren
Rienne Geschrieben 24. Februar 2022 Geschrieben 24. Februar 2022 Warum kann die Lösung deiner Meinung nach denn nicht richtig sein? Hast du mal versucht, die Datenbank nachzustellen? Es ist immer einfacher, zu helfen, wenn du dein Problem so weit schilderst, wie du mit deinen Gedanken gekommen bist. Zitieren
be98 Geschrieben 24. Februar 2022 Geschrieben 24. Februar 2022 Also ich würde es mit NOT IN machen(2,3). Das geht bestimmt auch so wie beschrieben Zitieren
Whiz-zarD Geschrieben 24. Februar 2022 Geschrieben 24. Februar 2022 vor 5 Stunden schrieb netzniesserin: INSERT INTO MitgliedArchiv WHERE (SELECT COUNT(idangebot) FROM Angebot WHERE mitgliedid = idmitglied) = 0; Ist das die vollständige Lösung? Das ist syntaktisch komplett falsch. Ein INSERT-Statement hat keine WHERE-Klausel. Auch werden hier überhaupt keine Daten selektiert. Meine Lösung würde so aussehen: CREATE TABLE MitgliedArchiv AS SELECT * FROM Mitglied LEFT JOIN Angebot ON Angebot.mitgliedid = Mitglied.idmitglied WHERE Angebot.mitgliedid IS NULL DELETE FROM Mitglied WHERE idmitglied IN (SELECT idmitglied FROM MitgliedArchiv) In der MitgliedArchiv-Tabelle liegen ja nun die inaktiven Mitglieder. Also muss man doch jetzt beim Löschen einfach nur die IDs der inaktiven holen. Zitieren
Rienne Geschrieben 24. Februar 2022 Geschrieben 24. Februar 2022 (bearbeitet) vor 1 Stunde schrieb Whiz-zarD: Ein INSERT-Statement hat keine WHERE-Klausel. Das stimmt so nicht ganz. In SQL gibt es auch den Befehl INSERT INTO SELECT, der für das Kopieren von Daten vorgesehen ist. Allerdings fehlt bei der Lösung etwas. vor 7 Stunden schrieb netzniesserin: INSERT INTO MitgliedArchiv WHERE (SELECT COUNT(idangebot) FROM Angebot WHERE mitgliedid = idmitglied) = 0; Es scheint fast so, als ob da bei der Angabe der Lösung eine Zeile weggelassen wurde, denn richtig müsste es heißen: INSERT INTO MitgliedArchiv SELECT * FROM Mitglied AS m WHERE (SELECT COUNT(idangebote) FROM Angebot AS a WHERE a.mitgliedid = m.idmitglied )=0; Alternativ kann man statt mit COUNT auch ein Subquery auf NOT EXISTS abfragen: INSERT INTO MitgliedArchiv SELECT * FROM Mitglied AS m WHERE NOT EXISTS( SELECT mitgliedid FROM Angebot AS a WHERE a.mitgliedid = m.idmitglied ); Aber auch der Vorschlag von @Whiz-zarD, direkt beim CREATE ein AS SELECT zu nutzen, ist möglich. Wobei man auch da beim WHERE diverse Optionen hat. Die DELETE-Anweisung aus der Lösung erscheint mir aber auf den ersten Blick korrekt. Was stört dich denn daran @netzniesserin? Bei SQL ist es, wie so oft, so, dass viele Wege zum gleichen Ziel führen können. Bearbeitet 24. Februar 2022 von Rienne Zitieren
netzniesserin Geschrieben 25. Februar 2022 Autor Geschrieben 25. Februar 2022 vor 17 Stunden schrieb Rienne: INSERT INTO MitgliedArchiv SELECT * FROM Mitglied AS m WHERE (SELECT COUNT(idangebote) FROM Angebot AS a WHERE a.mitgliedid = m.idmitglied )=0; Hi Rienne, da bin ich aber froh. Ja, jetzt macht es Sinn, dankeschön. vor 18 Stunden schrieb Whiz-zarD: CREATE TABLE MitgliedArchiv AS SELECT * FROM Mitglied LEFT JOIN Angebot ON Angebot.mitgliedid = Mitglied.idmitglied WHERE Angebot.mitgliedid IS NULL hi Wiz-zard - ja, so hätte ich die Aufgabe auch gelöst. Das mit dem insert into select - das wußte ich auch nicht... Daher ein Dankeschön für die Info, daß es für das Kopieren solch eine select gibt. Cristina reagierte darauf 1 Zitieren
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.