Tabellen vergleichen und Einträge löschen

Nemesis

Nemesis

N3RD
Hi,
ich habe eine SQL-Tabelle in er ich reservierte IPs eintrage und eine in die ich IPs einntrage, welche im Netz vorhanden sind.
Nun versuche ich per Lösch-Abfrage die aus der Reservierungs-Tabelle zu löschen, welche in der für die vorhandenen stehen.

Die Tabellen und benötigten Attribute sind:

BelegteIPs(IP,Subnet)
ReservierteIPs(IP,Subnet)

Der Ansatz:
PHP:
DELETE FROM ReservierteIPs
WHERE IP=(SELECT IP FROM BelegteIPs) AND Subnet=(SELECT Subnet from BelegteIPs)

aber das akzeptiert er nicht, da mekkert er , dass ich die Tabelle aus der gelöscht werden soll angeben muss.

Ist das SQL-Statement korrekt ?

thx!
 
Hi,
ich habe eine SQL-Tabelle in er ich reservierte IPs eintrage und eine in die ich IPs einntrage, welche im Netz vorhanden sind.
Nun versuche ich per Lösch-Abfrage die aus der Reservierungs-Tabelle zu löschen, welche in der für die vorhandenen stehen.
Die Tabellen und benötigten Attribute sind:
BelegteIPs(IP,Subnet)
ReservierteIPs(IP,Subnet)
thx!

Hi,

so vielleicht ?:

Code:
DELETE FROM reservierteips RI
where IP = (select IP from belegteips BI where RI.IP = BI.IP);

...nur auf IPs bezogen...!

Gruß
 
Zuletzt bearbeitet:
Exists ist dein Freund und performanter sollte es auch sein.
DELETE FROM reservertieIPs RIP WHERE EXISTS (SELECT ip FROM belegteIPs BIP where RIP.IP = BIP.IP). Aber abgesehen davon ists ein guter Vorschlag von Grandpa. Und bei der zu erwartenden Menge machts eigentlich net wirklich eins aus. Außerdem könnte ich was die Performance angeht hier eh falsch liegen :-)
 
Zuletzt bearbeitet:
hm, die performance ist hier zweitrangig, da es nicht sehr viele Datensätze sind.
da es sich auch noch um unterschiedliche subnetze handelt wird dann die lösung, wenn ich mich nicht irre, wie folgt lauten:

Code:
DELETE FROM reservertieIPs RIP WHERE EXISTS (SELECT ip FROM belegteIPs BIP where RIP.IP = BIP.IP and RIP.Subnet=BIP.Subnet)
 
Sorry, hab das etwas übertrieben geschrieben. Wie immer bei SQL führen viele Wege zum Ziel aber so wie du es jetzt geschrieben hast sollte es gehen. Alternativ wäre auch Möglich WHERE IP IN (SELECT .....). Aber letztendlich tut sich das alles nicht viel.
 
wie bereits gesagt, viele wege führen nach rom ... mir genügt einer ;)

ich sag mal danke !
 
öhm Handelt es sich um SQL oder um MySQL?
Auch wenn der thread jetzt schon abgeschlossen ist interessiert mich ob nicht auch
Code:
DELETE FROM ReservierteIPs
WHERE IP=BelegteIPs.IP AND Subnet=BelegteIPs.Subnet
zum gewünschten ergebnis führt.
 
Ich würde mir so 'ne komische Syntax gar nicht angewöhnen wollen, selbst wenn sie funktionieren *sollte*...
 
naja es ist kompakter als die syntax mit dem select in den klammern... ist allerdings geschmackssache...
ich habs so gelernt...
 
also,
ich habs jetzt wie folgt gelöst:
Code:
DELETE *
FROM ReservierteIPs
WHERE EXISTS
(SELECT IpSeg3, IpSeg4 
FROM Network, ReservierteIPs 
WHERE ReservierteIPs.IP = Network.IpSeg4 and ReservierteIPs.IPBereich=Network.IpSeg3);
aber ... er möchte immer alle datensätze in der tabelle reservierteIPs löschen.
mit der Ausgabe die ich als unterabfrage habe hingegen, gibt er mir nur die die in beiden vorhanden sind an:
Code:
SELECT IpSeg3, IpSeg4 
FROM Network, ReservierteIPs 
WHERE ReservierteIPs.IP = Network.IpSeg4 and ReservierteIPs.IPBereich=Network.IpSeg3
Wobei IpSeg3 das Subnet und IpSeg4 die Adressbits darstellt.

so funktionierts:
Code:
DELETE *
FROM ReservierteIPs
WHERE IP IN
(SELECT IpSeg4 
FROM Network, ReservierteIPs 
WHERE ReservierteIPs.IP = Network.IpSeg4 and ReservierteIPs.IPBereich=Network.IpSeg3)
AND IPBereich IN (SELECT IpSeg3 
FROM Network, ReservierteIPs 
WHERE ReservierteIPs.IP = Network.IpSeg4 and ReservierteIPs.IPBereich=Network.IpSeg3);
 
Zuletzt bearbeitet:
seltsam...
Hab grade kein MySQL zur Hand, aber das schaue ich mir heut Abend nochmal an..
 

Ähnliche Themen

CMS Problem [php]

PHP und MySQL CREATE TABLE in mysql_query

Zurück
Oben