MySQL - DELETE + INNER JOIN
Garwaniny
- datenbank
moin!
Gelöscht werden soll aus der Tabelle users
wo die id
die gleiche ist wie in der Tabelle people
die uid
(Ist alles in MySQL)
Hier die Tabellen:
^^^^^^^^^^^^^^^^^^
mysql> SELECT * FROM users;
+----+-------+
| id | name |
+----+-------+
| 1 | lorem |
| 2 | ipsum |
| 3 | dolar |
| 4 | sit |
| 5 | amet |
+----+-------+
5 rows in set (0.00 sec)
mysql> SELECT * FROM people;
+----+-----+-----------+
| id | uid | name |
+----+-----+-----------+
| 1 | 3 | Benjamin |
| 2 | 4 | Mario |
| 3 | 5 | Lukas |
| 4 | 6 | Christoph |
| 5 | 7 | Alex |
+----+-----+-----------+
5 rows in set (0.00 sec)
Der INNER JOIN greift perfekt:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
mysql> SELECT users.id AS users-id
, users.name AS users-name
, people.id AS people-id
,
people.uid AS people-uid
, people.name AS people-name
FROM users INNER JOIN people ON users.id = people.uid;
+----------+------------+-----------+------------+-------------+
| users-id | users-name | people-id | people-uid | people-name |
+----------+------------+-----------+------------+-------------+
| 3 | dolar | 1 | 3 | Benjamin |
| 4 | sit | 2 | 4 | Mario |
| 5 | amet | 3 | 5 | Lukas |
+----------+------------+-----------+------------+-------------+
3 rows in set (0.01 sec)
Hier kommt der ERROR
^^^^^^^^^^^^^^^^^^^^
mysql> DELETE FROM users INNER JOIN people ON users.id = people.uid;
ERROR 1064: You have an error in your SQL syntax.
Check the manual that corresponds to your MySQL server version for the right syntax
to use near 'INNER JOIN people ON users.id = people.uid' at line 1
mysql>
Das MySQL Manual für Delete
http://dev.mysql.com/doc/mysql/en/delete.html
gibt einen eigenartigen Sytax mit DELETE ... USING ... WHERE an
welcher mir aber ein Rätsel aufgibt zu verstehen.
Das Manual schreibt z.B.
DELETE FROM t1, t2 USING t1, t2, t3 WHERE t1.id=t2.id AND t2.id=t3.id;
Eigentlich würde ich sofern es geht lieber mit JOIN's arbeiten
da mein obiger INNER JOIN die gewünschten Ergebnisse zurück gibt,
und genau diese gelöscht werden sollen.
Es soll sowohl mit INNER, als auch RIGHT OUTER und LEFT OUTER Join gehen.
Falls das mit JOIN's überhaupt nicht geht,
bitte ich um eine Erklärung wie es richtig geht.
Das englische Manual ist etwas schwer.
VLGVSB
Garwaniny
mysql> DELETE FROM users INNER JOIN people ON users.id = people.uid;
ersetzte das
INNER JOIN people ON
mal durch WHERE
moin
Das gleiche Problem mit WHERE:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
mysql> DELETE FROM users INNER JOIN people WHERE users.id = people.uid;
ERROR 1064: You have an error in your SQL syntax. Check the manual
that corresponds to your MySQL server version for the right syntax to
use near 'INNER JOIN people WHERE users.id = people.uid' at line 1
mysql>
Warum schreibt man bei JOIN's eigentlich ON und nicht WHERE?
Worin liegt der unterschied?
Und wie löse ich mein DELETE Problem nun?
VLGVSB
Garwaniny
echo $begrueszung;
mysql> DELETE FROM users INNER JOIN people ON users.id = people.uid;
Das MySQL Manual für Delete
http://dev.mysql.com/doc/mysql/en/delete.html
beschreibt zwei Beispiele für die "Multiple-table syntax". Benutze doch einfach eine von denen richtig: :-)
DELETE zu_löschende_tabelle FROM zu_löschende_tabelle JOIN verknüpfte_tabelle ....
echo "$verabschiedung $name";
moin
DELETE zu_löschende_tabelle FROM zu_löschende_tabelle JOIN verknüpfte_tabelle ....
Habs nun so versucht:
DELETE users FROM users INNER JOIN people WHERE users.id = people.uid;
Faszinierend...!
Warum funktioniert das so?
warum 2 mal users
?
Was macht das für einen Sinn?
Und warum ist im MySQL Manual nirgends eine solche Vorgehensweise
beshcrieben und nur so ein komischer DELETE ... USING ... WHERE Syntax?
Gibts dazu gutes Dokumentationsmanual online?
VLGVSB
Garwaniny
echo $begrueszung;
DELETE users FROM users INNER JOIN people WHERE users.id = people.uid;
Faszinierend...!
Warum funktioniert das so?
Weil das die (eine von beiden) von MySQL erwartete Syntax ist :-)
warum 2 mal
users
?
Was macht das für einen Sinn?
Das hat den Sinn, dass MySQL nun weiß, dass es nur im ersten users zu löschen hat, aber zum Ermitteln der zu löschenden Datensätze users und weitere Tabellen heranziehen soll.
Und warum ist im MySQL Manual nirgends eine solche Vorgehensweise
beshcrieben und nur so ein komischer DELETE ... USING ... WHERE Syntax?
Wieso? Das ist doch exakt dort auf der von dir erwähnten Handbuchsteite so zu finden.
echo "$verabschiedung $name";