Datensätze löschen, deren ID nirgends vorkommt

Dizzy

Dizzy

Brain Damage
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.
 
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:
 
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.
 
Zuletzt bearbeitet:
Awww ...

Und ... öhm ... hm?

Kuck dir meinen Edit oben an.

Durch

DELETE FROM TabelleA WHERE id NOT IN (SELECT IDa from TabelleA, TabelleB WHERE TabellaA.IDa = TabelleB.IDa)

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.
 
Würd'n
Code:
delete from TabelleA  where IDa not in (select distinct IDa from TabelleB)

nicht auch schon reichen?
 
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. :)
 

Ähnliche Themen

CentOS 6.3 RADIUS - Keine Verbindung möglich

PostgreSQL und Spaltenalias

Joins

Daten aus Feld weiterverarbeiten

Unterabfragen mit der äusseren Abfrage gruppieren

Zurück
Oben