Rechercher : dans
Par :

Problème DELETE en sql

Dernière réponse le 24 jui 2008 à 17:58:31 Nagra, le 24 jui 2008 à 14:40:32 
 Signaler ce message aux modérateurs

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 :)

Configuration: Windows XP
Firefox 3.0.1

Meilleures réponses pour « Problème DELETE en sql » dans :
SQL - éviter les doublons dans un SELECT VoirProblème Comment éviter les doublons dans les résultats d'une requête SQL ? Solution Il suffit d'utiliser la clause DISTINCT entre SELECT et les champs. Exemple : SELECT distinct id,nom,prenom FROM matable Plus d'informations ...
Gestion des paramètres SQL VoirSQL présente un certain nombre de paramètres au niveau d'Oracle qu'il est possible de visualiser à travers la commande : SHOW ALL Pour modifier la valeur d'un paramètre il suffit d'utiliser la commande : SET NOM_PARAM VALEUR
Sauvegarde automatique d'une BDD sous SQL EXPRESS 2005 VoirSi vous vous voulez automatiser une sauvegarde d'une base de données sous SQL server express, il existe une solution simple grâce à un fichier .bat. Créez un nouveau fichier texte. Ce fichier doit contenir les informations suivantes: SET...
SQL - Mise à jour d'informations VoirLe SQL permet la modification d'une table par un utilisateur (pour peu qu'il ait les droits suffisants...). La modification d'une table consiste à: ajouter des tuples modifier des tuples existants ou bien supprimer des tuples Insertion de...
SQL - Modification de table VoirModification de table Il est possible de supprimer une table grâce à la clause DROP, il existe aussi des commandes moins extrêmes permettant L'ajout de colonnes La modification de colonnes La suppression de colonnes Enfin, il est possible...
Le langage SQL VoirQu'appelle-t-on SQL? SQL (Structured Query Language, traduisez Langage de requêtes structuré) est un langage de définition de données (LDD, ou en anglais DDL Data Definition Language), un langage de manipulation de données (LMD, ou en anglais DML,...

1

cchristian, le 24 jui 2008 à 16:39:05

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.
Cordialement.

Cchristian.

Répondre à cchristian

2

Nagra, le 24 jui 2008 à 16:54:11

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 ++

Répondre à Nagra

3

 cchristian, le 24 jui 2008 à 17:58:31

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, Cordialement.

Cchristian.

Répondre à cchristian
Collection CommentÇaMarche.net