delete from where foo where not exists

delete from where foo where not exists

am 19.07.2007 20:25:25 von Torsten Robitzki

Hallo,
ich versuche hier gerade Daten, mit Referenzen ins Nirwana zu löschen, =

nach dem ich mir die Daten mit

select *
from company_request_votings v
where not exists (
select * from company_requests where id =3D v.request);

angeguckt hatte, wollte ich sie analog löschen mit

delete
from company_request_votings v
where not exists (
select * from company_requests where id =3D v.request);

Klapt leider nicht:

ERROR 1064 (42000): You have an error in your SQL syntax; check the=20
manual that corresponds to your MySQL server version for the right=20
syntax to use near 'where not exists (select * from company_requests=20
where id =3D v.request)' at line 1

Wo liegt den hier mein Denkfehler? Und wenn es so nicht geht, wie lösch=
e=20
ich dann die Daten, für die es keine referenzierten Einträge gibt.

In der Dokumentation habe ich sogar Beispiel mit einer exists clause=20
gefunden (http://dev.mysql.com/doc/refman/5.1/de/subqueries.html).

mfg Torsten

Re: delete from where foo where not exists

am 19.07.2007 20:51:54 von Torsten Robitzki

Oh, hab gerade den gefunden:
http://bugs.mysql.com/bug.php?id=3D5123

Wie könnte man das mit einer temporären Tabelle lösen?

mfg Torsten

Re: delete from where foo where not exists

am 19.07.2007 21:47:28 von Gregor Kofler

Torsten Robitzki meinte:
> Hallo,
> ich versuche hier gerade Daten, mit Referenzen ins Nirwana zu löschen,
> nach dem ich mir die Daten mit
>
> select *
> from company_request_votings v
> where not exists (
> select * from company_requests where id = v.request);
>
> angeguckt hatte, wollte ich sie analog löschen mit
>
> delete
> from company_request_votings v
> where not exists (
> select * from company_requests where id = v.request);

EXISTS ist mir noch nie abgegangen.

Ungetestet:

delete from foo where id not in (select distinct id from bar);

Mit `bar` als deiner referenzierten Tabelle.

Gregor


--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum

Re: delete from where foo where not exists

am 19.07.2007 23:36:07 von Torsten Robitzki

Hallo Gregor,

Gregor Kofler wrote:

> Ungetestet:
>
> delete from foo where id not in (select distinct id from bar);
>
> Mit `bar` als deiner referenzierten Tabelle.

funktioniert wunderbar, Danke!

mfg Torsten