Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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?

  • Autor

image.thumb.png.83b35ca0e72fba7ec09c017320060eed.png

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. 🙂

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.

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 von Rienne

  • Autor
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.

 

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.