Salut!
Vous sentez cette odeure?...
Ca sent la requête pourrie et les neuronnes cramés.
J'en peu plus je post.
Donc je me prend actuellement la tête sur un porblème de chargement de table (quotidien) sous MySQL. Le chargement est un peu spécifique :
Il s'agit de mettre à jours la table1 (t1)avec les données de la table3 (t3).
Comme vous pouvez le constater, ces deux tables sont jointables par le biais d'une 3ième: la table 2 (t2)
Pour ajouter un peu de piment, le moteur MyISAM m'interdit les clés étrangères. On pourrait opter pour la méthode bourrine, c'est à dire vider t1 pour la recharger ensuite, mais il nous faut concerver l'identifiant numérique de t1 (auto_increment...).
Pour réaliser le chargement, j'ai donc identifié quelques étapes :
- Supprimer les enregistrements t1 orphelins (id_num2* t1 n'est égal à aucun id_num2 t2) pour simuler la clé étrangère.
- Supprimer les enregistrements t1 qui ne correspondent plus aux enregistrements t3
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2"DELETE FROM t1 WHERE `id_num2*` NOT IN (SELECT id_num2 FROM t2);
Là je bloque, j'ai passé pas mal de temps à essayé divers trucs avec des jointures (de tout types ) mais ca donne pas grand chose.
- Ajouter les enregistrements de t3 qui ne figurent pas dans t1:
Là ca marche (presque).
- Updater les enregistrements existants de t1 avec ceux de t3.
Je bloque aussi...
En plus, j'ai simplifié: En effet, la table 3 n'a pas de clé primaire. Il faut en constituer une avec la concaténation de id_char et data3, pour l'utiliser dans les jointures...
le schéma donnerai plus ceci:
La jointure entre t1 et t2 permet la concaténation des champs id_char* t2 et data3 t1 . Cette concaténation permet ensuite la jointure entre t2 et t3 ...
Le casse tête quoi. Donc j'y travaille et vous tiens au courant, toute aide serai la bienvenue, ce truc dépasse ma connaissance du SQL et je sature
Merci!
Partager