MySQL Datensätze löschen

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/mysql-datenstze-lschen_226386/page_1 - zur Vollversion wechseln!


McDeath98 schrieb am 25.09.2011 um 22:18

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 schrieb am 25.09.2011 um 22:21

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 schrieb am 25.09.2011 um 22:22

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 schrieb am 25.09.2011 um 22:57

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 schrieb am 25.09.2011 um 23:25

versuch mal

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


McDeath98 schrieb am 25.09.2011 um 23:28

danke. Werd ich morgen testen. Denke mal mit nem klaren Kopf rangehn lösst den einen oder anderen Knopf :D


McDeath98 schrieb am 26.09.2011 um 03:43

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 schrieb am 26.09.2011 um 07:56

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 schrieb am 26.09.2011 um 11:24

Sollte eigentlich per Constraints abgesichert sein damit solche Inkonsistenzen gar nicht erst entstehen.


kleinerChemiker schrieb am 26.09.2011 um 11:28

Sollte, ist es aber oft nicht. MYISAM Tabellen können (bzw. konnten) das nicht mal, iirc.




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025