Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/11/2010, 00h46   #1
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 277
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 277
Points : 2 323
Points : 2 323
Par défaut Supprimer id absents d'un couple de tables

Bonjour,

je tente de supprimer en une seule requête des id qui sont présents dans une table (insertions) et non dans une autre (historique).

Pour cela j'ai testé ces 2 requêtes :

Code sql :
1
2
3
4
5
6
 
DELETE FROM insertions WHERE symbole IN(
	SELECT insertions.symbole FROM insertions
        LEFT JOIN historique 
        ON insertions.symbole = historique.symbole
        WHERE historique.symbole IS NULL) AS regroupement

et

Code sql :
1
2
3
4
5
 
DELETE FROM insertions WHERE symbole IN(
        SELECT id FROM insertions WHERE NOT EXISTS(
	SELECT id FROM historique
        WHERE insertions.symbole =  historique.symbole))

Mais je me heurte à l'erreur 1093 :

Citation:
You can't specify target table 'insertions' for update in FROM clause
Je pourrais bien sur effectuer la suppression en 2 requêtes mais peut on la faire en une seule ?

Merci.

PS: une préférence entre les 2 requêtes sachant qu'elles durent le même temps ?
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2010, 01h06   #2
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
sous oracle c'est le fameux probleme de la table mutante.

sous mysql la vie est belle:

Code :
1
2
3
4
5
6
7
 
DELETE FROM insertions AS i 
WHERE NOT EXISTS
        (
	 SELECT * FROM historique
         WHERE i.symbole =  historique.symbole
        )
j'ai pas testé mais je crois que ça marche.
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2010, 01h11   #3
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 277
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 277
Points : 2 323
Points : 2 323
J'avais déjà testé de mettre des alias mais il n'as pas l'air d'apprécier...

Citation:
#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 'AS i WHERE NOT EXISTS ( SELECT * FROM historique WHERE i' at line 1
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2010, 01h14   #4
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 277
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 277
Points : 2 323
Points : 2 323
Ahah en fait c'est bon merci, j'ai fais une recherche sur les alias MySQL avec DELETE :

Code :
1
2
3
4
5
6
7
 
DELETE i FROM insertions AS i 
WHERE NOT EXISTS
        (
	 SELECT * FROM historique
         WHERE i.symbole =  historique.symbole
        )
Merci

Citation:
Note

If you declare an alias for a table, you must use the alias when referring to the table:

DELETE t1 FROM test AS t1, test2 WHERE ...

Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2010, 01h25   #5
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
merci j'apprends des trucs en lisant ce forum.
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h06.


 
 
 
 
Partenaires

Hébergement Web