2009-11-20 7 views
4

Je souhaite supprimer certains éléments de la base de données. J'ai la requête suivante:Comment faire pour activer cette requête MySQL SELECT dans une requête DELETE?

SELECT * 
FROM sheets, entries 
WHERE entries.sheetID = sheets.id AND sheets.clientID = 13 

Cela fonctionne, et renvoie 2 résultats.

Maintenant, je veux transformer cette requête SELECT en une requête DELETE. Cependant, ce qui suit ne fonctionne pas:

DELETE FROM sheets, entries 
WHERE entries.sheetID = sheets.id AND sheets.clientID = 13 

MySQL lance l'erreur suivante:

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 'WHERE entries.sheetID = sheets.id AND sheets.clientID = 13' at line 1

Qu'est-ce que je fais mal ici?

+0

Essayez-vous de supprimer des lignes de feuilles, d'entrées ou des deux? – Andomar

+0

Andomar: Je veux supprimer toutes les feuilles et les entrées de feuille du client 13. Je préfère ne pas utiliser plus de 1 requête si ce n'est pas vraiment nécessaire. –

Répondre

10

MySQL 4 et des supports deleting from multiple tables at once, en utilisant la syntaxe suivante:

DELETE sheets, entries 
FROM sheets, entries 
WHERE entries.sheetID = sheets.id AND sheets.clientID = 13 

Si vous utilisez MySQL en dessous de la version 4, vous devez supprimer des lignes d'une table à la fois, et vous pouvez utiliser l'une des autres solutions affichées ici.

0

Pouvez-vous essayer quelque chose comme ça

DELETE FROM sheets 
FROM sheets, entries 
WHERE entries.sheetID = sheets.id AND sheets.clientID = 13 

si vous voulez supprimer des feuilles et

DELETE FROM entries 
FROM sheets, entries 
WHERE entries.sheetID = sheets.id AND sheets.clientID = 13 

si son à partir des entrées

+0

Le problème est que je veux supprimer des deux en même temps. Je veux supprimer toutes les feuilles et les entrées de feuille du client 13. Je préfère ne pas utiliser plus de 1 requête si ce n'est pas vraiment nécessaire. –

0

Je crois que vous ne pouvez DELETE d'une table à une fois.

DELETE FROM entries 
WHERE entries.sheetID IN 
(SELECT ID FROM sheets WHERE clientID = 13) 

DELETE FROM sheets 
WHERE sheets.clientID = 13 
+1

MySQL permet réellement une suppression multi-table http://dev.mysql.com/doc/refman/5.0/fr/delete.html – Andomar

+0

Merci Andomar, chaque jour est une journée d'école! –

2

essayer

DELETE sheets, entries 
FROM sheets, entries 
WHERE entries.sheetID = sheets.id AND sheets.clientID = 13 

I googlé SQL supprimer de 2 tables à la fois et trouvé this forum post

+0

Une autre réponse correcte, mais un peu moins documentée :) Merci! –

0

Vous pouvez uniquement supprimer d'une table à la fois. Si vous voulez conduire les deux effacements de la même requête, vous pouvez faire quelque chose comme ce qui suit:

DELETE from sheets where id in (
SELECT sheets.id 
FROM sheets, entries 
WHERE entries.sheetID = sheets.id AND sheets.clientID = 13); 
DELETE from entries where id in (
SELECT entries.id 
FROM sheets, entries 
WHERE entries.sheetID = sheets.id AND sheets.clientID = 13); 
+0

La seconde échouerait puisque vous avez déjà supprimé les lignes de la table de jointure –

+0

Ceci n'est apparemment pas vrai dans MySQL qui, comme indiqué dans d'autres réponses, supporte l'instruction DELETE que l'OP essaie de créer (avec une syntaxe légèrement différente). –

2

MySQL vous permettra de supprimer sur une jointure, mais vous devez spécifier les colonnes, donc en utilisant votre exemple, le bon la syntaxe serait

 
DELETE sheets.*, entries.* FROM sheets, entries WHERE entries.sheetID = sheets.id AND sheets.clientID = 13