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