2017-01-16 12 views
1

Ich habe zwei Tabellen (wie folgt), ich muss Tabelle 1 Spalten mit Table2 Werte basierend auf der Sprache in Tabelle2 aktualisieren.So aktualisieren Sie eine Tabelle mit Werten aus einer anderen Tabelle basierend auf unterschiedlichen Bedingungen

So etwas (aber es ist nicht eine gültige Syntax):

UPDATE Table1 
If table2.language='EN' 
    SET description_EN = Table2.Description 
Else 
    SET description_FR=table2.description 
FROM table1 
left outer join table2 on table1.id=table2.id 

Tabelle 1:

id description_EN Description_FR 
1 null   null 
2 null   null 
3 null   null 

Tabelle 2:

id Language Description 
1 EN   description in English 1 
1 FR   description in French 1 
2 EN   description in English 2 
2 FR   description in French 2 
3 EN   description in English 3 
3 FR   description in French 3 
+1

Die Syntax lautet 'UPDATE ... FROM ... WHERE '. –

Antwort

1

Verwenden Sie eine CASE mit jeder Spalte, die verbundenen Beschreibung der Rückkehr, wenn die Sprache übereinstimmt, oder selbst (dh keine Änderung), wenn nicht die richtige Sprache:

UPDATE Table1 SET 
description_EN = CASE WHEN table2.language = 'EN' THEN Table2.Description else description_EN END, 
description_FR = CASE WHEN table2.language = 'FR' THEN Table2.Description else description_FR END 
FROM table1 
JOIN table2 on table1.id = table2.id 

Diese jede Sprache in die Reihe schließt sich, aber nur macht eine Änderung, wenn es angemessen ist.

+0

Danke. Es war wirklich hilfreich, ich sehe Ergebnisse in beiden Spalten. id \t Description_En \t Description_FR Beschreibung in Englisch 1 \t \t Beschreibung in Französisch 2 Beschreibung in Englisch 3 – lisa

+0

@lisa so, funktioniert es? Ich bin mir nicht sicher, was du mir im letzten Teil deines Kommentars zu sagen versuchst. – Bohemian

+0

Entschuldigung, es erlaubte mir nicht, gerade jetzt zu bearbeiten ... Danke. Es war sehr hilfreich. In den Spalten 'Description_EN' und 'Description_EN' werden Werte eingegeben. Es wurden jedoch nicht alle Werte aus Tabelle 2 in Tabelle 1 eingefügt. Ich habe abgefragt, ob in der Spalte 'Sprache' von Tabelle2 Einträge vorhanden sind, deren Wert nicht 'EN' ist. oder 'FR', ich habe keine. Daher sollten in den neu aktualisierten table1 description_XX-Spalten keine leeren Datensätze mehr vorhanden sein. Ich bin verwirrt, irgendwelche Ideen vielleicht warum? – lisa

0

Sie können dies tun mit einer CASE Aussage:

Update  T1 
Set   description_EN = Case When T2.Language = 'EN' 
       Then T2.Description 
       Else T1.description_EN 
      End, 
      description_FR = Case When T2.Language <> 'EN' 
       Then T2.Description 
       Else T1.description_FR 
      End 
From  Table1 T1 
Left Join Table2 T2 On T1.Id = T2.Id 

Dies wird überprüfen, ob der LanguageEN ist und diesen Wert aktualisieren, andernfalls wird es gleich gesetzt.

Ebenso für die FR ein.

+0

Warum brauchen wir 'Left Join'? –

+0

@Prdp Wenn ich weiß, ich kopiere nur seine 'JOIN'. – Siyual

+0

Es gab einen Tippfehler. Behebt es, dass es dir nichts ausmacht –

Verwandte Themen