j'ai besoin d'un avis sur la methodologie à mettre en place afin de faire
une misa à jour d'une table en fonction d'une autre. Je tiens à préciser que
je ne peux utiliser de triggers, mais je souhaiterais cependant avoir une
méthode rigoureuse.
Je possède deux tables, l'une est "table_source", l'autre est "table_cible".
Chacune à la même structure.
J'aimerais pouvoir mettre à jour la table_cible à partir de table_source.
Ainsi, si la ligne de table_source est dans table_cible, je ne fais rien, si
la ligne n'existe que dans table_source mais pas dans table_cible, j'insère,
et enfin, s'il existe une modification quelconque de la ligne (hormis l'ID
qui est clé primaire) je mets à jour la ligne dans la table_cible.
Voici mon code qui ne marche pas en cas de modifiaction d'une ligne de la
table_source car ce code insère dans ce cas un doublon dans la table_cible.
Citation:
insert into table_cible select * from table_source where not exists
(select * from table_cible where and table_source.id = table_ref.id
table_source.champ1 = table_ref.champ1 and table_ref.champ2 =
table_source.champ2)
Alors, je ne sais pas la méthodologie la plus efficace et optimisée à
employer pour faire ce test. Faire un long test en comparant l'ID, puis le
contenu de chaque champ, ne me semble pas très beau!
Si quelqu'un pouvait m'aider, ça serait très sympa.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Mystique
slt,
Pense à mettre "distinct" dans tes select et normalement tu ne devrais pas avoir de doublon.
"le_scrameustache" wrote:
Bonjour,
j'ai besoin d'un avis sur la methodologie à mettre en place afin de faire une misa à jour d'une table en fonction d'une autre. Je tiens à préciser que je ne peux utiliser de triggers, mais je souhaiterais cependant avoir une méthode rigoureuse.
Je possède deux tables, l'une est "table_source", l'autre est "table_cible". Chacune à la même structure.
J'aimerais pouvoir mettre à jour la table_cible à partir de table_source. Ainsi, si la ligne de table_source est dans table_cible, je ne fais rien, si la ligne n'existe que dans table_source mais pas dans table_cible, j'insère, et enfin, s'il existe une modification quelconque de la ligne (hormis l'ID qui est clé primaire) je mets à jour la ligne dans la table_cible.
Voici mon code qui ne marche pas en cas de modifiaction d'une ligne de la table_source car ce code insère dans ce cas un doublon dans la table_cible.
Citation: insert into table_cible select * from table_source where not exists (select * from table_cible where and table_source.id = table_ref.id table_source.champ1 = table_ref.champ1 and table_ref.champ2 = table_source.champ2)
Alors, je ne sais pas la méthodologie la plus efficace et optimisée à employer pour faire ce test. Faire un long test en comparant l'ID, puis le contenu de chaque champ, ne me semble pas très beau!
Si quelqu'un pouvait m'aider, ça serait très sympa.
slt,
Pense à mettre "distinct" dans tes select et normalement tu ne devrais pas
avoir de doublon.
"le_scrameustache" wrote:
Bonjour,
j'ai besoin d'un avis sur la methodologie à mettre en place afin de faire
une misa à jour d'une table en fonction d'une autre. Je tiens à préciser que
je ne peux utiliser de triggers, mais je souhaiterais cependant avoir une
méthode rigoureuse.
Je possède deux tables, l'une est "table_source", l'autre est "table_cible".
Chacune à la même structure.
J'aimerais pouvoir mettre à jour la table_cible à partir de table_source.
Ainsi, si la ligne de table_source est dans table_cible, je ne fais rien, si
la ligne n'existe que dans table_source mais pas dans table_cible, j'insère,
et enfin, s'il existe une modification quelconque de la ligne (hormis l'ID
qui est clé primaire) je mets à jour la ligne dans la table_cible.
Voici mon code qui ne marche pas en cas de modifiaction d'une ligne de la
table_source car ce code insère dans ce cas un doublon dans la table_cible.
Citation:
insert into table_cible select * from table_source where not exists
(select * from table_cible where and table_source.id = table_ref.id
table_source.champ1 = table_ref.champ1 and table_ref.champ2 =
table_source.champ2)
Alors, je ne sais pas la méthodologie la plus efficace et optimisée à
employer pour faire ce test. Faire un long test en comparant l'ID, puis le
contenu de chaque champ, ne me semble pas très beau!
Si quelqu'un pouvait m'aider, ça serait très sympa.
Pense à mettre "distinct" dans tes select et normalement tu ne devrais pas avoir de doublon.
"le_scrameustache" wrote:
Bonjour,
j'ai besoin d'un avis sur la methodologie à mettre en place afin de faire une misa à jour d'une table en fonction d'une autre. Je tiens à préciser que je ne peux utiliser de triggers, mais je souhaiterais cependant avoir une méthode rigoureuse.
Je possède deux tables, l'une est "table_source", l'autre est "table_cible". Chacune à la même structure.
J'aimerais pouvoir mettre à jour la table_cible à partir de table_source. Ainsi, si la ligne de table_source est dans table_cible, je ne fais rien, si la ligne n'existe que dans table_source mais pas dans table_cible, j'insère, et enfin, s'il existe une modification quelconque de la ligne (hormis l'ID qui est clé primaire) je mets à jour la ligne dans la table_cible.
Voici mon code qui ne marche pas en cas de modifiaction d'une ligne de la table_source car ce code insère dans ce cas un doublon dans la table_cible.
Citation: insert into table_cible select * from table_source where not exists (select * from table_cible where and table_source.id = table_ref.id table_source.champ1 = table_ref.champ1 and table_ref.champ2 = table_source.champ2)
Alors, je ne sais pas la méthodologie la plus efficace et optimisée à employer pour faire ce test. Faire un long test en comparant l'ID, puis le contenu de chaque champ, ne me semble pas très beau!
Si quelqu'un pouvait m'aider, ça serait très sympa.