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