Bonjour,

En fait je désire avoir votre avis sur quelques requêtes sql que je désire utiliser.
J'ai 2 tables :
- LdapResult consultée par une application dans laquelle l'utilisateur peut ajouter, modifier supprimer des enregistrements.(Champs: UniqueId, FirstName,LastName,Extension,Source, Mobile, Comment)
- Ldap qui est le résultat d'un lookup sur plusieurs serveur ldap et servant à mettre à jour la table LdapResult.(Champs : UniqueId,FirstName,LastName,Extension).
Le champs Source de la table LdapResult sert a différencier les enregistrements ajoutés par l'utilisateur de ceux ajouter par mon application.
Mon but est donc de retirer de LdapResult les enregistrements dont la valeur de Source est 'ldap' et qui ne sont plus dans la table Ldap; de mettre à jour dans LdapResult les enregistrement communs au deux tables dont une valeur à changé dans Ldap pour les champs FirstName, LastName et Extension et enfin d'ajouter dans LdapResult les enregistrements présent dans Ldap et pas dans LdapResult.
Pour ce faire j'utilise 3 requêtes dont voici la syntaxe (ma base de donnée est MySQL 5) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
DELETE FROM VP.LdapResult
WHERE Source='ldap' AND UniqueId NOT IN (SELECT UniqueId FROM VP.Ldap)
 
UPDATE VP.LdapResult JOIN VP.Ldap ON Ldap.UniqueId = LdapResult.UniqueId
SET LdapResult.FirstName=Ldap.FirstName, LdapResult.LastName=Ldap.LastName,LdapResult.Extension=Ldap.Extension
WHERE LdapResult.Source='ldap'
 
INSERT INTO VP.LdapResult (UniqueId,FirstName,LastName,Extension,Source)
SELECT UniqueId, FirstName, LastName, Extension, 'ldap' AS Source FROM VP.Ldap
WHERE UniqueId NOT IN (SELECT UniqueId FROM VP.LdapResult)
Pensez-vous qu'il existe une solution plus simple ?
Mon approche est elle valable ?

D'avance merci,
Christian