PDA

View Full Version : SQL Delete wenn Datensätze vorhanden



Bobou
26-01-10, 17:38
Hallo an Alle,

Ich möchte via SQL folgendes erreichen und hoffe ich finde hier Hilfe!

Es bestehen 2 Dateien
in der 1. Artikel in der 2.Lieferanten eindeutiger Schlüssel Lieferantennr und Sparte, nun möchte ich gerne aus der 1.Datei alle Artikel löschen deren Lieferantennummer nicht in der 2. Datei bestehen.....


DELETE FROM ARTIKEL WHERE not exists (select * from
LIEFERANT where ARTIKEL.lieferant_nr = LIEFERANT.Lieferant_nr and
ARTIKEL.sparte = LIEFERANT.sparte)

... dieses funktioniert einwandfrei


und nun mein Problem ich möchte das nur Datensätze aus der 1.Datei (Artikel) gelöscht werden wenn in der 2.Datei (Lieferanten) mindestens 1 Datensatz vorhanden ist, sprich wenn Datei 2 count(*) > 0 denn DELETE.

Vielen Dank im voraus

mfG
Bobou

Fuerchau
26-01-10, 20:31
DELETE FROM ARTIKEL WHERE (select count(*) from
LIEFERANT where ARTIKEL.lieferant_nr = LIEFERANT.Lieferant_nr and
ARTIKEL.sparte = LIEFERANT.sparte) > 0

kitvb1
27-01-10, 09:07
DELETE FROM ARTIKEL WHERE (select count(*) from
LIEFERANT where ARTIKEL.lieferant_nr = LIEFERANT.Lieferant_nr and
ARTIKEL.sparte = LIEFERANT.sparte) > 0
Sollte es nicht
.... = 0
sein?

...1.Datei alle Artikel löschen deren Lieferantennummer nicht in der 2. Datei bestehen.....

Fuerchau
27-01-10, 09:52
mindestens 1 Datensatz ist für mich immer noch > 0

Bobou
27-01-10, 10:53
Vielen Dank erstmal für die Antworten,

aber irgendwie funktioniert das ganze noch nicht so wie gedacht.

Ich versuche das mal als WENN/DANN -Formel anschaulich zu machen


WENN


SELECT COUNT(*) FROM LIEFERANT > 0

DANN


DELETE FROM ARTIKEL WHERE not exists (select * from
LIEFERANT where ARTIKEL.lieferant_nr = LIEFERANT.Lieferant_nr and
ARTIKEL.sparte = LIEFERANT.sparte)

SONST

Keine DELETE Ausführen

ENDE

andreaspr@aon.at
27-01-10, 11:01
dann probier mal das:


DELETE FROM ARTIKEL WHERE not exists (select * from
LIEFERANT where ARTIKEL.lieferant_nr = LIEFERANT.Lieferant_nr and
ARTIKEL.sparte = LIEFERANT.sparte)
AND (SELECT COUNT(*) FROM LIEFERANT) > 0

BenderD
27-01-10, 11:03
... and ist dein Freund, mit anderen Worten, man darf Bedingungen mit AND verknüpfen...

D*B


Vielen Dank erstmal für die Antworten,

aber irgendwie funktioniert das ganze noch nicht so wie gedacht.

Ich versuche das mal als WENN/DANN -Formel anschaulich zu machen


WENN


SELECT COUNT(*) FROM LIEFERANT > 0

DANN


DELETE FROM ARTIKEL WHERE not exists (select * from
LIEFERANT where ARTIKEL.lieferant_nr = LIEFERANT.Lieferant_nr and
ARTIKEL.sparte = LIEFERANT.sparte)

SONST

Keine DELETE Ausführen

ENDE

cbe
27-01-10, 12:26
Du hast es doch schon fast formuliert:



DELETE FROM ARTIKEL WHERE not exists (select * from
LIEFERANT where ARTIKEL.lieferant_nr = LIEFERANT.Lieferant_nr and
ARTIKEL.sparte = LIEFERANT.sparte)
and
(SELECT COUNT(*) FROM LIEFERANT where ARTIKEL.lieferant_nr = LIEFERANT.Lieferant_nr)>0