IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Probleme dans une requete SQL


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Mars 2013
    Messages : 15
    Points : 8
    Points
    8
    Par défaut Probleme dans une requete SQL
    Bonjour les amis,

    J'espere que vous allez bien.

    Je travaille sur un petit projet de base de donnée SQL sur XAMPP Version 7.4.3, j'ai 2 tables avec la structure suivante
    (Les donnés ci dessous sont écrits et générés au hasards et ne représente pas des vrais donnés)

    Table 1 nommée "Client à jour" contenant les donnés à jours des clients, et table 2 nommée Clients contenant les donnés actuels des clients (qui peuvent ne pas être à jour)

    Clients_a_jour:
    ID_Client Nom_Complet Adresse Telephone Commentaire
    2 François Dupond 2 rue Jean Lampo 0600000001
    3 Eric Martin 11 Rue alber reville 0700000001
    4 Jean Dubois 16 boulevard marechal 0700990099
    6 Amanda Laux 22 boulevard de paris 0700990009


    Clients:
    ID_Client Nom_Complet Adresse Telephone Commentaire
    1 Daniela Jack 13 Rue Jambo 0600000002
    3 Eric Martin 6 Rue jean jack 0700000001
    4 Jean Dubois 16 boulevard marechal 0700990099
    5 Adam Travesa 76 boulevard d'italy 0700990010

    Je souhaite créer une requête qui fera la comparaison des champs des 2 tables afin de remplir le champ "Commentaire" des 2 table en fonction si le client est un nouveau client (c'est à dire il existe dans la table Clients_a_jour et non existant dans la table Clients), client existant dans les 2 tables mais ses données doivent être modifiés, ou un client qui doit être supprimé (existant dans la table Clients mais non existant dans la table Clients_a_jour, et avoir un résultat comme suit :


    Clients_a_jour:
    ID_Client Nom_Complet Adresse Telephone Commentaire
    2 François Dupond 2 rue Jean Lampo 0600000001 Nouveau Client
    3 Eric Martin 11 Rue alber reville 0700000001 Client à modifier
    4 Jean Dubois 16 boulevard marechal 0700990099 Aucune modification nécessaire
    6 Amanda Laux 22 boulevard de paris 0700990009 Nouveau client


    Clients:
    ID_Client Nom_Complet Adresse Telephone Commentaire
    1 Daniela Jack 13 Rue Jambo 0600000002 Client à supprimer
    3 Eric Martin 6 Rue jean jack 0700000001
    4 Jean Dubois 16 boulevard marechal 0700990099
    5 Adam Travesa 76 boulevard d'italy 0700990010 Client à supprimer

    PS: La clé de détermination du client est ID_Client

    J'ai donc écris les 2 requêtes suivantes

    Requête 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    --Remplir le champ "Commentaire" de la table "Clients_a_jour"
    update `Clients_a_jour`
    left join `Clients`
                 on  Clients.Id_Client = Clients_a_jour.id
     
                set  Clients_a_jour.`commentaire` = case        when Clients.Id_Client  = Clients_a_jour.Id_Client 
                                                                  and Clients.Adresse  = Clients_a_jour.Adresse 
                                                                  and Clients.Telephone  = Clients_a_jour.Telephone 
                                                                  then 'Aucune modification nécessaire'
     
                                                                  when Clients.Id_Client  = Clients_a_jour.Id_Client 
                                                                  or Clients.Adresse  <> Clients_a_jour.Adresse 
                                                                  or Clients.Telephone  <> Clients_a_jour.Telephone 
                                                                  then 'Client à modifier'
     
                                                                  when Clients.Id_Client is null                       
                                                                  then 'Nouveau Client'  
    end
    Requête 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    --Remplir le champ "Commentaire" de la table "Clients"
    update `Clients`
    left join `Clients_a_jour`
                 on  Clients_a_jour.Id_Client = Clients.Id_Client
     
                set  Clients.`statut` = case when Clients_a_jour.Id_Client is null then 'Client à supprimer'  end
    Les 2 requêtes fonctionnent très bien, sauf que quand il s'agit des donnés avec 100000 lignes (100000 clients dans les 2 tables), la requête mes du temps pour qu'elle s’exécute (environ 90 minutes)

    J'ai essayé de créer une nouvelle colonne "Concat" pour concaténer l'adresse et le numéro de téléphone et déterminer comparer uniquement la colonne concat au lieu de comparer les 2 colonnes adresse et telephone, mais la requête prends la même durée pour s’exécuter

    Pourriez vous s'il vous plait m'aider à trouver une autre requête qui peut me générer ce mémé résultat dans quelques minutes ?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    90 minutes pour croiser 2 tables de 100000 lignes, ça me parait énorme.
    Est-ce que tu peux nous donner la structure (DDL) des 2 tables ?
    Et surtout: est-ce que la colonne is_client est bien la clé primaire des deux tables ?

    Tatayo.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Mars 2013
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Oui tu as raison, je n'ai pas determiné id_client comme clé primaire des 2 table, apres avoir fait cela ça marche nickel maintenant, Wow.. merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme d'encodage dans une requete SQL
    Par kedare dans le forum Général Python
    Réponses: 1
    Dernier message: 25/03/2009, 17h52
  2. Probleme avec une requete sql dans VB6 pour un champ date
    Par jacko842 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2009, 08h31
  3. [Access] Probleme de count dans une requete sql
    Par castelligreg dans le forum Langage SQL
    Réponses: 6
    Dernier message: 14/04/2006, 16h20
  4. [sql]Probleme de count dans une requete sql (sous access)
    Par castelligreg dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/04/2006, 16h06
  5. [MySQL] probleme de syntaxe dans une requete sql
    Par jeanfrancois dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 28/03/2006, 10h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo