Delete + Joins

dave_

Erfahrenes Mitglied
Ich müsste einen DELETE befehl mit nem join kombinieren, oder zumindest auf ne andere tabelle zugreifen, hier mal meine 2 tabellen, ganz vereinfacht


++users
id
del

++nachrichten
usrid
text

ich möchte nun alle nachrichten löschen, bei denen in der tabelle users del auf 1 steht, und halt die usrid gleich der id in users ist.

Falls dies nicht möglich ist: es sind ca 30 userids die del=0 haben, ich könnte also auch diese 30 usrids in eine where klausel schreiben, aber ich denke das das verdammt langsam ist?

es geht hier um ca 70 000 Datensätze, daher mache ich mir die 'geschwindigkeits-gedanken'

hoffe ihr könnt mir helfen, danke.
 
Zuletzt bearbeitet:
combo von delete und select geht nicht
mit mysql (erst die neuste version kann angeblich subselects die man dazu braucht)

aber es gibt da was :)

wenn du deine delete ids in ein string schaffen könntes getrennt von kommas haste gewonnen ...

delete from bla where id in (1,3,4,6,7)
 
das wären aber knapp 2000!


delete from bla where id in (1,3,4,6,7)

was heisst das? lösche von bla, wenn id gleich einer der werte in der klammer?
 
nein

im 1. post waren es 30 die ich nicht löschen muss "es sind ca 30 userids die del=0 "

delete from bla where id not in (1)

heisst so viel wie lösche von bla wenn id!=1 ?
 
jepp :)

falls du unsicher bist kannst ja erst mal ein select loslassen

select * from bla where idnr not in (1,2,4,5)
 
danke das mit der liste war ein guter tipp, kommt ja auch schließlich häufiger vor, dass man mehrere bedingungen mit dem gleichen feld hat.

bin mal auf mysql4 gespannt welche möglichkeiten einem dann geboten werden.
 
Original geschrieben von dave_
ich möchte nun alle nachrichten löschen, bei denen in der tabelle users del auf 1 steht, und halt die usrid gleich der id in users ist.
Delete b.* from tab2 b, tab1 a where ( (a.userid = b.userid) and (b.id = 1) );

Oder habe ich da jetzt etwas gänzlichst falsch verstanden ?
 
was ich bei solchen abfragen immer nicht kapiere:

woher weiss mysql welche zeile- also aus welcher tabelle- er löschen soll?

löscht er so "Delete b.* from tab2 b, tab1" aus dem 1. argument, also tab2?

ich möchte ja nichts aus der users table löschen
 

Neue Beiträge

Zurück