"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

MySQL Datensätze löschen

McDeath98 25.09.2011 - 22:18 1318 9
Posts

McDeath98

Dark Rider
Avatar
Registered: Jul 2000
Location: Schweiz
Posts: 724
Moinsen

Hab schon ewig und 3 Tage nix mehr mit SQL gemacht und stehe grad vor nem Problem für das ich irgendwie keine Lösung finde.

Ich versuche für unsere Gilde die DKP ein wenig aufzuräumen.

Nun habe ich einige alte Raids gelösche. Leider wurden die Items und die Punkte nicht entsprechend aktualisiert.

Nun versuche ich das mittel SQL Befehlen zu beheben.

Folgendes Szenario:

Tabelle A enthält die Items
Tabelle B die Raidnamen und IDs

Nun möchte ich folgendes erreichen. Er soll alle Items aus Tabelle A löschen für die es in Tabelle B keine Raid gibt.

Also alles aus Tabelle A löschen, wenn für den Wert Raidid in Tabelle B kein entsprechender Wert für Raidid existiert.

Ich hoffe es kann mir jemand helfen.

Vielen Dank im Vorraus.

mfg

Neo1010

.
Registered: May 2003
Location: -
Posts: 1212
delete from table_a where not exists(select * from table_b where table_a.id = table_b.id)

ist bei mir auch schon bisl her aber so müssts doch funken

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
Dein letzter Satz direkt in normales SQL umgesetzt würde ca. so aussehen:

delete from a where not exists (select * from b where a.raidid = b.raidid)

Keine Ahnung, ob MySQL das inzwischen auch kapiert. :)

McDeath98

Dark Rider
Avatar
Registered: Jul 2000
Location: Schweiz
Posts: 724
Code: SQL
DELETE FROM `eqdkp_set_items` WHERE not exists (select * from `eqdkp_set_raids` where 'eqdkp_set_items.raid_id' = 'eqdkp_set_raids.raid_id')

Leer mir die komplette Item Datenbank :/

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4282
versuch mal

Code: SQL
DELETE FROM eqdkp_set_items WHERE id NOT IN (select DISTINCT id from eqdkp_set_raids)

McDeath98

Dark Rider
Avatar
Registered: Jul 2000
Location: Schweiz
Posts: 724
danke. Werd ich morgen testen. Denke mal mit nem klaren Kopf rangehn lösst den einen oder anderen Knopf :D

McDeath98

Dark Rider
Avatar
Registered: Jul 2000
Location: Schweiz
Posts: 724
Code: SQL
delete FROM eqdkp_nonset_items WHERE raid_id NOT IN (select DISTINCT raid_id from eqdkp_nonset_raids)

War die Lösung. Vielen Dank

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4282
Freut mich. Ist eigentlich auch die wörtliche Übersetzung deines Wunsches in SQL: Lösche alles, für das es in raids keine id gibt :)

Obermotz

Fünfzylindernazi
Avatar
Registered: Nov 2002
Location: OÖ/RI
Posts: 5262
Sollte eigentlich per Constraints abgesichert sein damit solche Inkonsistenzen gar nicht erst entstehen.

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4282
Sollte, ist es aber oft nicht. MYISAM Tabellen können (bzw. konnten) das nicht mal, iirc.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz