Datensätze löschen (evtl. mit JOINS?)

Alles, was MariaDB und MySQL betrifft, kann hier besprochen werden.

Datensätze löschen (evtl. mit JOINS?)

Postby visionmaster » 31. August 2004 22:17

Hallo,

Ich habe 2 Tabellen, in der Tabelle A stehen Adressen mit einer eindeutigen "firmenid" (Prmärschlüssel) drin. Die andere Tabelle B enthält "firmenid" als Fremdschlüssel (Bezugsschlüssel). Nun sollen alle Datensätze aus der Tabelle B gelöscht werden, dessen "firmenid" nicht in der Tabelle A zu finden ist.

=> Wie mache ich das am besten? Muss ich mit einem SELECT und einer while-Schleife einfach alle Datensätze aus Tabelle B einzeln durchgehen, nachschauen ob es in der Tabelle A einen Datensatz mit der firmenid gibt, wenn nicht dann eben den Datensatz aus Tabelle B löschen.

=> Oder kann ich das mit einem raffinierten JOIN lösen. Ich meine JOINE alle Datensätze von Tabelle A mit Tabelle B (LEFT JOIN?, RIGHT JOIN?), alles was übrig bleibt, also alle Datensätze aus Tabelle B die kein Pendant in Tabelle A haben, rauslöschen. Geht das? Wenn ja, wie? JOINS sagen mir schon etwas, allerdings wüsste ich nicht wie man nicht gejointe Datensätze löscht...

Die Frage knüpft hier an einen anderen Thread mit dem Subject "Mit Left Join löschen" an.

Besten Dank.
visionmaster
 
Posts: 36
Joined: 24. June 2004 14:39

Postby Fantana » 01. September 2004 12:21

Ich würde die Datensätze folgendermasen löschen:

DELETE FROM Tabelle WHERE Bedingung;

bzw. wenn du beide Tabellen komplett leeren willst kannst du die Tabellen auch mit DROP TABLE Tabelle; entfernen und danach die Tabellen wieder erzeugen.

Wenn du bestimmte Inhalte der beiden Tabellen löschen willst kenn ich noch die Möglichkeit:

DELETE FROM Tabelle-1 WHERE ID-Tabelle1
DELETE FROM Tabelle-2 WHERE ID-Tabelle2

PHP-Script dazu kann folgedermasen aussehen:

<html>
<head>
<title> Löschen </title>
<body>
<?php
$dbconnect = mysql_connect("localhost", "user", "password");
mysql_select_db("Name der DB");

$ok1 = @mysql_query("DELETE FROM Tabelle-1 WHERE ID1=$id");
$ok1 = @mysql_query("DELETE FROM Tabelle-2 WHERE ID2=$id");
if ($ok1 and $ok2) {
echo("<p>Erfolgreich gelöscht!</p>);
} else {
echo("<p>Fehler beim Löschen!<br />"."Fehler: " . mysql_error() . "</p>");
}
?>
</body>
</html>

Hoffe es hilft dir weiter.

MfG
Fantana
 
Posts: 5
Joined: 31. August 2004 16:40

Postby tapferesschneiderlein » 11. September 2004 09:51

Versuch mal
Code: Select all
DELETE tabelle_b FROM tabelle_b b
LEFT JOIN tabelle_a a ON a.firmenid = b.firmenid
WHERE a.firmenid IS NULL
tapferesschneiderlein
 
Posts: 3
Joined: 01. August 2004 12:48


Return to MariaDB - MySQL

Who is online

Users browsing this forum: No registered users and 14 guests