Datensätze löschen, deren ID nirgends vorkommt

Dieses Thema im Forum "SQL und Datenbanken" wurde erstellt von Dizzy, 26.03.2009.

  1. Dizzy

    Dizzy Brain Damage

    Dabei seit:
    02.05.2007
    Beiträge:
    857
    Zustimmungen:
    0
    Ort:
    Graz
    Grüezi,

    ich habe folgendes Szenario, und brauche hierfür einen Query:

    Tabelle A
    IDa,foo

    Tabelle B
    IDb, IDa, bar

    Ich möchte alle Datensätze in TabelleA löschen, deren ID nicht in TabelleB in der Spalte IDa aufscheint.

    Jetzt kommt mir folgender Pseudo-Query in den Kopf:

    Code:
    DELETE FROM TabelleA WHERE Count(SELECT IDa from TabelleA, TabelleB WHERE TabellaA.IDa = TabelleB.IDa) = 0
    Danke im Voraus.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 supersucker, 26.03.2009
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    Nö,

    diese Query wird nicht mal annährend das tun, was du dir erwartest.

    Dringend mal lesen: http://www.w3schools.com/sql/default.asp

    Ungetesteter Schnellschuß:

    Code:
    DELETE FROM TabelleA WHERE id IN (SELECT IDa from TabelleA, TabelleB WHERE TabellaA.IDa = TabelleB.IDa)
    Eleganter würde es mit dem EXISTS-Operator gehen, aber das überlaß ich deiner Recherche......:devil:
     
  4. Dizzy

    Dizzy Brain Damage

    Dabei seit:
    02.05.2007
    Beiträge:
    857
    Zustimmungen:
    0
    Ort:
    Graz
    Danke dir. :)
     
  5. #4 supersucker, 26.03.2009
    Zuletzt bearbeitet: 26.03.2009
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    UIIII,

    Kommando zurück, ich hab dein Posting nur überflogen, meine query tut genau das Gegenteil von dem was du wolltest. Shame on me!

    Neuer Schnellschuß (danach geh ich pennen, also bitte selber mit Testdaten prüfen):

    Code:
    DELETE FROM TabelleA WHERE id NOT IN (SELECT IDa from TabelleA, TabelleB WHERE TabellaA.IDa = TabelleB.IDa)
    Absolute Krüppellösung, sollte es aber tun.

    Besser wäre wie schon erwähnt EXISTS, man könnte sich auch bestimmt was mit HAVING basteln, aber dazu bin ich gerade zu müde.
     
  6. Dizzy

    Dizzy Brain Damage

    Dabei seit:
    02.05.2007
    Beiträge:
    857
    Zustimmungen:
    0
    Ort:
    Graz
    Awww ...

    Und ... öhm ... hm?
     
  7. #6 supersucker, 26.03.2009
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    Kuck dir meinen Edit oben an.

    Durch

    wird alles aus Tabelle A gelöscht, deren ID nicht in der ID-Ergebnismenge des SELECT-statements ist (== alle IDs, die in beiden Tabellen vorhanden sind).

    Eklig, aber sollte funktionieren.

    Holy Shit, ich sollte meinen vorher geposteten Link mal selber wieder lesen, elegant ist das nicht.
     
  8. Dizzy

    Dizzy Brain Damage

    Dabei seit:
    02.05.2007
    Beiträge:
    857
    Zustimmungen:
    0
    Ort:
    Graz
    Dann bedanke ich mich abermals. :)
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. daboss

    daboss Keine Macht für niemand!

    Dabei seit:
    05.01.2007
    Beiträge:
    1.294
    Zustimmungen:
    0
    Ort:
    sydney.australia.world
    Würd'n
    Code:
    delete from TabelleA  where IDa not in (select distinct IDa from TabelleB)
    
    nicht auch schon reichen?
     
  11. Dizzy

    Dizzy Brain Damage

    Dabei seit:
    02.05.2007
    Beiträge:
    857
    Zustimmungen:
    0
    Ort:
    Graz
    Hi,

    @supersucker
    deine Lösung spuckt leider einen Fehler: #1241 - Operand should contain 1 column(s)

    @daboss
    deine Lösung spuckt keine, schau ma moi. :)
     
Thema:

Datensätze löschen, deren ID nirgends vorkommt

Die Seite wird geladen...

Datensätze löschen, deren ID nirgends vorkommt - Ähnliche Themen

  1. [Ruby on Rails] Feld eines Datensatzes löschen

    [Ruby on Rails] Feld eines Datensatzes löschen: Morgen, folgendes Problem: Angenommen ich habe das Model Produkt mit Name, Preis und Beschreibung und möchte nun von einem bestehendem Produkt...
  2. LDAP > 7 Minuten bis lauffähig mit 4000 Datensätze

    LDAP > 7 Minuten bis lauffähig mit 4000 Datensätze: Delete Delete
  3. Neue ausführbare Datei mit Datensätzen aus einer Datei und Variablen erstellen

    Neue ausführbare Datei mit Datensätzen aus einer Datei und Variablen erstellen: Hallo erstmal allesamt. Mein erster Beitrag hier. Ich habe in letzter Zeit eigentlich nur Batch-Scripte, HTML etc. geschrieben und nie shells....
  4. 32-Bit als Standard in Wine // Wine komplett löschen

    32-Bit als Standard in Wine // Wine komplett löschen: Hallo, soweit ich das verstanden habe installiert man Windows-Programme unter Wine bei einem 64-Bit-Linux standardmäßig auch als 64-Bit-Prpgramm....
  5. Wie kann ich das RAM löschen?

    Wie kann ich das RAM löschen?: Wie kann ich das RAM löschen? Danke im Vorraus