DELETE SELECT
Résolu/Fermé
mikesunshine59
Messages postés
73
Date d'inscription
lundi 22 janvier 2018
Statut
Membre
Dernière intervention
24 février 2018
-
22 janv. 2018 à 12:12
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 23 janv. 2018 à 10:58
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 23 janv. 2018 à 10:58
A voir également:
- DELETE SELECT
- Hiberfil.sys delete - Guide
- Just delete me - Guide
- Touche delete clavier ✓ - Forum Clavier
- Reboot and select proper boot device asus - Forum Matériel & Système
- *#9900# delete dumpstate/logcat - Forum Samsung
7 réponses
Fallentree
Messages postés
2309
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
22 juillet 2019
209
Modifié le 22 janv. 2018 à 20:36
Modifié le 22 janv. 2018 à 20:36
CREATE TABLE IF NOT EXISTS `Course` (`Id` varchar(80) ,`date` int(10) );
INSERT INTO `Course` (`Id`,`DATE`) VALUES ('Pommes', '101010'),('Poires', '101010'),('Pommes', '101012'),('Poires', '101012');
CREATE VIEW Doublon AS
SELECT Id AS Produit,Min(date) as date
FROM Course
GROUP BY ID;
DELETE FROM Course
WHERE EXISTS (SELECT Doublon.Produit,Doublon.date FROM Doublon where Doublon.Produit=Course.Id and Doublon.date=Course.date);
DROP VIEW Doublon;
Ca fonctionne
Note le EXISTS
J'aurais un +1 ???
jordane45
Messages postés
38446
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 février 2025
4 739
22 janv. 2018 à 13:45
22 janv. 2018 à 13:45
Bonjour,
Tu n'as pas mis de condition dans ton WHERE....
Il faut lui dire si c'est EGALE ou DIFFERENTE ou SUPERIEUR.. ou INFERIEUR.... IN ;. NOT IN ....etc
Dans ton cas ça serait un = je pense
Tu n'as pas mis de condition dans ton WHERE....
WHERE datecreation ....
Il faut lui dire si c'est EGALE ou DIFFERENTE ou SUPERIEUR.. ou INFERIEUR.... IN ;. NOT IN ....etc
Dans ton cas ça serait un = je pense
DELETE FROM matable WHERE datecreation = (SELECT MIN(datecreation ) FROM matable )
mikesunshine59
Messages postés
73
Date d'inscription
lundi 22 janvier 2018
Statut
Membre
Dernière intervention
24 février 2018
22 janv. 2018 à 14:32
22 janv. 2018 à 14:32
Merci Jordane pour ton retour,
Le problème persiste.
Dans ma table j'ai deux colonnes. A (l'ID) et B (La date)
Exemple :
A = PAPA / B = 23/01/2018
A = MAMAN / B = 21/01/2018
A = PAPA / B = 22/01/2018
A = MAMAN / B = 20/01/2018
La requete doit supprimer la 3ème et 4ème ligne (et non pas la 4ème ligne uniquement)
J'ai mis:
DELETE
FROM matable
WHERE datecreation = (SELECT MIN(datecreation) FROM matable GROUP BY Id)
Tu peux m'aider stp ?
Le problème persiste.
Dans ma table j'ai deux colonnes. A (l'ID) et B (La date)
Exemple :
A = PAPA / B = 23/01/2018
A = MAMAN / B = 21/01/2018
A = PAPA / B = 22/01/2018
A = MAMAN / B = 20/01/2018
La requete doit supprimer la 3ème et 4ème ligne (et non pas la 4ème ligne uniquement)
J'ai mis:
DELETE
FROM matable
WHERE datecreation = (SELECT MIN(datecreation) FROM matable GROUP BY Id)
Tu peux m'aider stp ?
Fallentree
Messages postés
2309
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
22 juillet 2019
209
Modifié le 22 janv. 2018 à 16:14
Modifié le 22 janv. 2018 à 16:14
A lieu de PAPA MAMAN, tu aurais pu mettre des pommes; des poires et des scoubidou bidous.
Je sais les scoubidous ne sont pas périssables ....
Pour la suite, passe un identifiant auto incrémenté ou un numéro de ligne pour éviter de te prendre le scoubidou.
Je sais les scoubidous ne sont pas périssables ....
Pour la suite, passe un identifiant auto incrémenté ou un numéro de ligne pour éviter de te prendre le scoubidou.
jordane45
Messages postés
38446
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 février 2025
4 739
Modifié le 22 janv. 2018 à 15:44
Modifié le 22 janv. 2018 à 15:44
Déjà...rassure moi ... tes dates .... elles sont bien en format de date TIMESTAMP ou DATETIME hein ??? Tu n'as pas mis des dates à la française j'espère... (dans du varchar).
Ensuite.. ce que tu veux c'est supprimer, pour chaque ID la ligne la plus ancienne ??
Dans ce cas ça serait un truc du genre :
Ensuite.. ce que tu veux c'est supprimer, pour chaque ID la ligne la plus ancienne ??
Dans ce cas ça serait un truc du genre :
DELETE FROM matable WHERE ID IN (SELECT T.ID FROM ( SELECT ID, MIN(datecreation ) FROM matable GROUP BY ID ) T )
mikesunshine59
Messages postés
73
Date d'inscription
lundi 22 janvier 2018
Statut
Membre
Dernière intervention
24 février 2018
22 janv. 2018 à 16:52
22 janv. 2018 à 16:52
Oui je te rassure le format est timestamp
J'ai testé ce que tu proposes. Je n'ai pas d'erreur mais cela efface tout
J'ai testé ce que tu proposes. Je n'ai pas d'erreur mais cela efface tout
Fallentree
Messages postés
2309
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
22 juillet 2019
209
Modifié le 22 janv. 2018 à 16:05
Modifié le 22 janv. 2018 à 16:05
comment tu veux supprimer par l id , ils sont identiques ...
ca fait longtemps que je n'est plus pratiqué. mais ça me choque.
essaie d’écrire la requête pour avoir les éléments voulus et il faut passer les deux références id et date car y a pas unicité. ici
ca fait longtemps que je n'est plus pratiqué. mais ça me choque.
essaie d’écrire la requête pour avoir les éléments voulus et il faut passer les deux références id et date car y a pas unicité. ici
DELETE FROM T_PROSPECT
WHERE (CLI_NOM, CLI_PRENOM) = (SELECT PRP_NOM, PRP_PRENOM
FROM T_CLIENT)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Fallentree
Messages postés
2309
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
22 juillet 2019
209
22 janv. 2018 à 16:09
22 janv. 2018 à 16:09
DELETE
FROM matable
WHERE (Id, datecreation) = (SELECT Id, MIN(datecreation ) FROM matable GROUP BY Id)
mikesunshine59
Messages postés
73
Date d'inscription
lundi 22 janvier 2018
Statut
Membre
Dernière intervention
24 février 2018
22 janv. 2018 à 16:48
22 janv. 2018 à 16:48
La réponse à cette requête est : #1093 - Table 'matable' is specified twice, both as a target for 'DELETE' and as a separate source for data
mikesunshine59
Messages postés
73
Date d'inscription
lundi 22 janvier 2018
Statut
Membre
Dernière intervention
24 février 2018
22 janv. 2018 à 22:40
22 janv. 2018 à 22:40
Tu as un +10 !
Ca fonctionne c'est top !
Ca fonctionne c'est top !
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
23 janv. 2018 à 10:58
23 janv. 2018 à 10:58
Ça fonctionne mais regarde quand même mon message en dessous sur le HAVING
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
22 janv. 2018 à 16:57
22 janv. 2018 à 16:57
Bonjour,
Attention ! Dans toutes les réponses données, on supprime la ligne avec la date la plus ancienne... Même si c'est la seule ! Ce qui aura vite fait de te supprimer toutes tes données !!
Rajoute un HAVING count(*) > 1 après ta clause GROUP BY pour ne supprimer que celles qui ont au moins deux lignes (et du coup tu peux aussi te garder un historique minimal des X dernières dates pour chaque ID, en remplaçant 1 par X)
Xavier
Attention ! Dans toutes les réponses données, on supprime la ligne avec la date la plus ancienne... Même si c'est la seule ! Ce qui aura vite fait de te supprimer toutes tes données !!
Rajoute un HAVING count(*) > 1 après ta clause GROUP BY pour ne supprimer que celles qui ont au moins deux lignes (et du coup tu peux aussi te garder un historique minimal des X dernières dates pour chaque ID, en remplaçant 1 par X)
Xavier
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
22 janv. 2018 à 17:02
22 janv. 2018 à 17:02
Bonjour,
Je ne pense pas que la sous-requête soit la bonne méthode.
Une jointure serait plus facile à gérer, de ce genre :
Xavier
Je ne pense pas que la sous-requête soit la bonne méthode.
Une jointure serait plus facile à gérer, de ce genre :
DELETE t1 FROM matable t1 INNER JOIN ( SELECT Id, MIN(datecreation) as minDate FROM matable GROUP BY Id HAVING count(*) > 1 ) T2 ON T1.Id = T2.Id AND t1.datecreation = t2.minDate;
Xavier
mikesunshine59
Messages postés
73
Date d'inscription
lundi 22 janvier 2018
Statut
Membre
Dernière intervention
24 février 2018
22 janv. 2018 à 17:37
22 janv. 2018 à 17:37
Je pense aussi mais ca ne fonctionne pas cette requete
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
22 janv. 2018 à 18:11
22 janv. 2018 à 18:11
Dis-en plus.
Quel est le message d'erreur ?
Est-ce que la sous-requête, exécutée seule, fonctionne ?
Quel est le message d'erreur ?
Est-ce que la sous-requête, exécutée seule, fonctionne ?