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
Requête 2
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
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)
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
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 ?
Partager