2017-07-17 1 views
0

J'ai deux tables; une table de consultation qui sera rarement mise à jour, et une table de données qui sera mise à jour fréquemment.Mise à jour de la valeur basée sur deux autres valeurs à l'aide de la table de mappage

La table de consultation ressemble à ceci, où la combinaison de Code1 et Code2 est unique pour chaque ligne.

Code1 | Code2 | Classification 
------------------------------ 
AB | CD | Class1 
XX | YY | Class2 

La table de données ressemble à ceci;

SomeData | Code1 | Code2 | Classification 
------------------------------ 
foo  |AB  | CD | 
bar  |XX  | YY | 

J'ai besoin de mettre à jour dynamiquement la table de données avec la classification correspondant à la combinaison unique de Code1 et Code2 dans la table de consultation.

Quelle serait la manière la plus simple/la plus élégante d'y parvenir?

+1

Pourquoi? Utilisez simplement JOIN pour obtenir les valeurs lorsque vous en avez besoin. –

Répondre

1

Vous pouvez mettre à jour 2 table comme ce

UPDATE table1, table2 
SET table2.Classification = table1.Classification 
WHERE table1.Code2 = table2.Code2 AND table1.Code1 = table2.Code1; 
+1

Nécessaire de faire un léger mod pour que cela fonctionne dans t-sql; begin tran MISE À JOUR table1 SET table2.Classification = table1.Classification DE table1, table2 OÙ table1.Code2 = table2.Code2 ET table1.Code1 = table2.Code1 commettras tran – cc0

2

Vous avez simplement besoin de rejoindre les 2 tables comme ceci:

Select b.SomeData, b.Code1, b.Code2, a.Classification 
FROM 
Lookup_table a 
left join 
Data_table b 
on (a.Code1 = b.Code1 and a.Code2 = b.Code2) 

Ainsi, votre mise à jour devient:

Update b 
Set b.Classification = a.Classification 
FROM 
Data_table b 
Right join 
Lookup_table a 
on (a.Code1 = b.Code1 and a.Code2 = b.Code2) 
2

Vous pouvez juste créer vue avec ce code et obtenir whenver vous voulez

select t2.somedata,t1.Code1,t1.Code2,t1.Classification from lookup_table as t1 
left join data_table as t2 on t1.code1=t2.code1 and t1.code2=t2.code2 

Si vous avez encore besoin de mettre à jour, utilisez ce

update t2 
set 
t2.Classification=t2.Classification 
from lookup_table as t1 
inner join data_table as t2 on t1.code1=t2.code1 and t1.code2=t2.code2