Requete SQL

Fermé
biscrak Messages postés 6 Date d'inscription jeudi 11 juin 2015 Statut Membre Dernière intervention 25 juin 2015 - 24 juin 2015 à 09:27
biscrak Messages postés 6 Date d'inscription jeudi 11 juin 2015 Statut Membre Dernière intervention 25 juin 2015 - 25 juin 2015 à 08:49
Bonjour, je suis entrain de travailler sur une base de donnée qui gère des clients pour des événements.
objectif remplacer tout les numéro de téléphone qui son double par un "/"

Dans cet base de données j'ai des doublons j'ai donc exécuter la requête :

SELECT COUNT(numeroTelC) as nbr_doublon , numeroTelC , nomC , prenomC FROM reservation_client GROUP BY numeroTelC HAVING COUNT(numeroTelC) > 1


j'ai pue donc voir les doublons et j'ai voulu exécute cet requête mais elle ne s'exécute pas et aprés avoir fait des recherches sur OpenClassroom et ailleurs , il écrit que cet impossible .

voici la requête :
UPDATE reservation_client SET numeroTelC = "/" where 1 < (SELECT COUNT (numeroTelC) FROM reservation_client GROUP BY numeroTelC HAVING COUNT (numeroTelC )> 1)


et voici l'erreur qui est apparue.

#1630 - FUNCTION culture.COUNT does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manual .

merci de votre aide

2 réponses

jordane45 Messages postés 38157 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 mai 2024 4 655
24 juin 2015 à 13:21
Bonjour,

Premier souci .... dans ta sous-requête tu as mis un espace entre le COUNT ... et les parenthèses
SELECT COUNT (numeroTelC)

... il ne faut pas.

SELECT COUNT(numeroTelC)


Ensuite....
Dans la requête principale de ton UPDATE .... le WHERE 1 = ... ne fonctionnera pas !
Il faut que tu lui précises un CHAMP .... et que tu lui passe une LISTE via IN

Un truc du genre :
UPDATE reservation_client SET numeroTelC = "/" where numeroTelC IN (SELECT numeroTelC FROM reservation_client GROUP BY numeroTelC HAVING COUNT (numeroTelC )> 1)

1
biscrak Messages postés 6 Date d'inscription jeudi 11 juin 2015 Statut Membre Dernière intervention 25 juin 2015
24 juin 2015 à 14:41
après avoir pris ta requête et avoir fait d'autre test,
requête :

UPDATE reservation_client SET numeroTelC = "/" where numeroTelC IN (SELECT numeroTelC FROM reservation_client GROUP BY numeroTelC HAVING COUNT (numeroTelC )> 1)


j'ai obtenu un autre message d'erreur :
#1093 - You can't specify target table 'reservation_client' for update in FROM clause

j'ai aussi essayer d'autre requête plus ou moins similaire son résultat satisfaisant , je pense comme l'avait expliquer OC ma requête n'est pas envisageable étant donner que je modifie une valeur qui est utiliser pour exécuter une sous-requête et qui est modifier par la suite c'est doit être la limite de l'update.
0
jordane45 Messages postés 38157 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 mai 2024 4 655
24 juin 2015 à 14:47
Ah oui.. c'est en effet une difficulté connue.

Par contre... (je ne connais pas ta table...) .. mais en pointant sur les ID par exemple
UPDATE reservation_client 
     SET numeroTelC = "/" 
where id IN (
      SELECT id
      FROM reservation_client 
      GROUP BY numeroTelC 
      HAVING COUNT (numeroTelC )> 1
 )
0
biscrak Messages postés 6 Date d'inscription jeudi 11 juin 2015 Statut Membre Dernière intervention 25 juin 2015 > jordane45 Messages postés 38157 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 mai 2024
25 juin 2015 à 08:49
alors j'ai essayer ta commande avec l'erreur 1093 encore.
J'ai donc essayer d'autre manière de procédé ; j'ai voulu créer une table qui est a l'identique de ma table reservation_client (nommé reservation_client2).
J'ai voulu supprimer tout les données qui était unique (qui apparaissaient qu'une seul fois) après plusieurs requête DELETE , UPDATE et sous-requête.
L'erreur 1093 ré-apparaissaient à chaque fois , je suppose donc que on ne peux pas faire ma requête demander . malgré cela je te remercie de tes réponses constructive et qui m'ont permis de mieux comprend le SQL
0