Les Allergies
Alimentaires
Posez votre question Signaler

Problème DELETE en sql

Nagra - Dernière réponse le 24 juil. 2008 à 17:58
Bonjour tout le monde!
Je post ce message parce que j'ai un problème avec une requete SQL de type DELETE et je ne comprend pas d'où vient le problème
Voilà donc la requête:
DELETE
FROM TempsTestCommande
WHERE (NomSequence, DateHeureSequence, PositionAPDU) NOT IN
(
SELECT DISTINCT SA.NomSequence, SA.DateHeureSequence, SA.PositionAPDU
FROM Sequence_APDU SA, TempsTestCommande TTC
WHERE SA.NomSequence = TTC.NomSequence
AND SA.DateHeureSequence = TTC.DateHeureSequence
AND SA.PositionAPDU = TTC.PositionAPDU
AND SA.NomSequence IS NOT NULL
AND SA.DateHeureSequence IS NOT NULL
AND SA.PositionAPDU IS NOT NULL
);
Lorsque je remplace le DELETE par un SELECT *, pas de problèmes, je récupère bien les résultats voulus. Seulement là ça ne marche pas et je ne comprend pas où se trouve le problème. L'erreur est la suivante:
You can't specify target table 'TempsTestCommande' for update in FROM clause
Si quelqu'un sait ou se trouve l'erreur je l'en remercie d'avance.
Bonne journée à tous :)
Lire la suite 

Problème DELETE en sql »

3 réponses
Réponse
+0
moins plus
Bonjour,

Le problème est certainement lié au fait qu'une même table "TempsTestCommande" est utilisée à la fois comme une des tables de référence pour effectuer la recherche (NOT IN) et comme une table mise à jour (avec DELETE) et ce dans la même requête SQL.
Ajouter un commentaire
Réponse
+0
moins plus
Salut! Merci de ta réponse :)

En effet, je me demandais si le problème de venait pas de là. Apparemment en faisant des recherches sur le numéro de l'erreur, il semble que MySQL ne gère pas ce genre de cas contrairement à d'autres SQBD.

Pour contourner le problèmes j'ai récupéré les résultats de la version avec le SELECT dans un vecteur Java (mon programme est écrit dans ce langage) et j'ai fais un DELETE sur chacune des lignes. C'est plus long et pas super propre mais je ne vois pas 36 autres solutions en fait. A l'arrivée mon programme lag un petit peu étant donné que je récupère quand même dans les 20.000 lignes avec cette méthode. Mais c'est mieux que rien et, de toutes manières, comme il s'agit de l'outil de maintenance de mon programme qui est sensé être exécuté tous les soirs, c'est pas bien grave qu'il prenne 1 minute à tout analyser alors qu'il pourrait prendre seulement 10 secondes :)

En tous cas merci de ta réponse!

Bonne soirée ++
Ajouter un commentaire
Réponse
+0
moins plus
Bonsoir,

Merci pour le retour,

il semble que MySQL ne gère pas ce genre de cas contrairement à d'autres SQBD.

En effet j'ai fait quelques tests en SQL/DB2, ça répond convenablement.

Bon courage,
Ajouter un commentaire
Ce document intitulé « Problème DELETE en sql » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?